我有一本我已经使用了几年的成绩册。我试图稍微清理一下,因为一位同事想要使用它,但它并不是真正的用户准备,只是个人准备好了。无论如何,我试图自动更新我的学生列表。我尝试了以下方法:
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。有没有办法保留execute命令中未引用的列?
编辑:尝试了一堆不同的东西,通过我的无能,没有任何作用。在循环中结束以下内容,只是出现错误: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更新所有其他字段。我放弃了一会儿。太沮丧了。
答案 0 :(得分:0)
好吧,永远不会想出INSERT OR REPLACE格式。结束刚刚运行和UPDATE查询,然后是INSERT(捕获主键上的错误)。适用于我正在做的事情。真的好像应该有一种优雅的方式。 UPSERT。不管。