我正在用我写的python脚本将某些CSV文件中的数据插入我的sqlite3数据库中。当我运行脚本时,它将第一行插入数据库中,但是在尝试插入第二行时会出现此错误:
sqlite3.IntegrityError: columns column_name1, column_name2 are not unique.
是,在CSV文件的前两个行中,column_name1和column_name2中的值是相同的。但是,这对我来说似乎有些奇怪,因为阅读此错误表明它表示对数据库列的独特性约束。我使用SQLITE专家个人进行了检查数据库详细信息,并且在当前表上没有显示任何唯一性约束。另外,我输入的任何字段都没有指定主要键。似乎数据库自动分配了这些。对可能导致此错误的什么想法?谢谢。
import sqlite3
import csv
if __name__ == '__main__' :
conn = sqlite3.connect('ts_database.sqlite3')
c = conn.cursor()
fileName = "file_name.csv"
f = open(fileName)
csv_f = csv.reader(f)
for row in csv_f:
command = "INSERT INTO table_name(column_name1, column_name2, column_name3)"
command += " VALUES (%s, '%s', %s);" % (row[0],row[1],row[2])
print command
c.execute(command)
conn.commit()
f.close()
如果SQLITE报告了IntegrityError错误,则很可能确实有这两列上的主键或唯一键,并且当您说没有时,您会出错。确保您真的在查看数据库的相同实例。
另外,使用字符串插值编写您的SQL语句。这很危险,也很难正确正确(您可能知道考虑到其中一个字段上有单个报价)。在sqlite中使用参数化语句非常非常简单。
错误可能是由于插入到语句中的重复列名所致。我猜这是一个错字,您的意思是commin_name3在插入到语句中。