- python
- sqlite
- flask
Чтобы упростить реализацию (я надеялся), я использую объект SQL, предоставляемый этим классом:
https://github. com/cs50/python-cs50/blob/main/src/cs50/sql.py
Природа этого объекта SQL заключается в том, что он не будет напрямую взаимодействовать с пандами; dataframe.to_sql не запускается. При проверке исходного кода выясняется, что необходимые функции SQL отсутствуют в объекте SQL. Таким образом, я вручную перебираю каждую строку CSV.
Оценки каждого сеанса генерируют четыре столбца: посещаемость, подготовка, участие и результат; имена столбцов добавляются к сеансу лабораторной работы (например, attendence_lab_1). Как только преподаватель отправляет оценки, данные считываются обратно во временный файл CSV, затем временный файл переименовывается, используя имя исходного файла CSV, перезаписывая его. Для следующего сеанса оценивания я воссоздаю базу данных, читая ее из CSV. Это означает, что я не могу жестко запрограммировать заголовки столбцов; Мне нужно прочитать заголовки из CSV, создать из него список, а затем создать оператор INSET INTO из этого списка заголовков. Используя ответы на Python sqlite3, создайте столбцы таблицы из списка с помощью .format в качестве модели, мне удалось поместить заголовки в таблицу. Но когда я перебираю строки, я получаю ошибки:
- Операторы должны быть разделены символами новой строки или точкой с запятой.
- Строковый литерал не завершена
код:
Код: Выделить всё
# https://pandas.pydata.org/docs/reference/io.html
df = pd.read_csv(stpath, header=0)
#df.to_sql(students, con)
headers = df.columns.values.tolist() # draw list of headers from df
# create table via prepared statement that scales with number of columns in table
def createTableStatement(tableName, columnList):
return f"CREATE TABLE IF NOT EXISTS {tableName} (id INTEGER, {columnList[0]}" + (", {}"*(len(columnList)-1)).format(*(columnList[1:])) + ", PRIMARY KEY(id))"
db.execute(createTableStatement("students", headers))
# read data into table
def createRowStatement(columnList):
return f'"INSERT INTO students ({columnList[0]}' + (', {}'*(len(columnList)-1)).format(*(columnList[1:])) + ') VALUES (?' + (', ?'*(len(columnList)-1)) + ')", row["Student"]' + (', row["{}"]'*(len(columnList)-1)).format(*(columnList[1:])) + ')'
with open(stpath, "r", encoding='utf-8-sig') as file:
reader = csv.DictReader(file)
for row in reader:
x = createRowStatement(headers)
print(x)
db.execute(x)
Код: Выделить всё
"INSERT INTO students (Student, Team, Session, Pod, Image, Lab1_Grade, Lab1_attend, Lab1_prep, Lab1_part, Lab1_disect) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", {columnList[0]}, row["Team"], row["Session"], row["Pod"], row["Image"], row["Lab1_Grade"], row["Lab1_attend"], row["Lab1_prep"], row["Lab1_part"], row["Lab1_disect"])
Код: Выделить всё
"INSERT INTO students (Student, Team, Session, Pod, Image, Lab1_Grade, Lab1_attend, Lab1_prep, Lab1_part, Lab1_disect) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", row["Student"], row["Team"], row["Session"], row["Pod"], row["Image"], row["Lab1_Grade"], row["Lab1_attend"], row["Lab1_prep"], row["Lab1_part"], row["Lab1_disect"])
Подробнее здесь: https://stackoverflow.com/questions/791 ... i-can-gene
Мобильная версия