sqlite3列不是唯一的



我正在用我写的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在插入到语句中。

最新更新