我有一本使用了几年的成绩册。我正在尝试清理它,因为一位同事想要使用它,但它并不是真正的用户准备好,只是个人准备好。无论如何,我试图自动更新我的学生名单。我尝试了以下方法:
import csv
import sqlite3
f = csv.reader(open('students.csv'))
db = sqlite3.connect('gradebook.db')
cursor = db.cursor()
for row in f:
print row
cursor.execute('INSERT OR REPLACE INTO students (id, name, class, gender, birthday, something, period, section_number, subject, begin_date, end_date, status, absents, tardies) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)', row)
db.commit()
db.close()
这适用于新生,但是,我的数据库中还有几列未被学校的 CSV 转储引用(笔记、当前章节等)。当我运行上面的代码时,我在非引用列中的所有内容都设置为 NULL。有没有办法保留执行命令中未引用的列?
编辑:由于我的无能,尝试了很多不同的东西,但没有任何效果。在循环中结束了以下内容,只是得到了一个错误:
cursor.execute('INSERT OR REPLACE INTO students (notes, id, name, class, gender,
birthday, something, period, section_number, subject, begin_date, end_date,
status, absents, tardies) VALUES ((select notes from students where id =
row[0]),?,?,?,?,?,?,?,?,?,?,?,?,?,?)', row)
这是我要保存的笔记。可以根据学生 ID 更新所有其他字段。我暂时放弃了。变得太沮丧了。