繁体   English   中英

SQLite3列不是唯一的

[英]SQLite3 Columns Are Not Unique

我正在使用编写的python脚本将某些csv文件中的数据插入到SQLite3数据库中。 当我运行脚本时,它将第一行插入数据库,但是在尝试插入第二行时给出此错误:

sqlite3.IntegrityError: columns column_name1, column_name2 are not unique.

确实,csv文件的前两行中column_name1和column_name2中的值相同。 但是,这对我来说有点奇怪,因为阅读此错误表明它表示数据库的一个或多个列上的唯一性约束。 我使用SQLite Expert Personal检查了数据库的详细信息,它在当前表上没有显示任何唯一性约束。 另外,我输入的所有字段均未指定主键。 看来数据库会自动分配这些。 对什么可能导致此错误有任何想法? 谢谢。

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错误,则很可能在这两列上确实有一个PRIMARY KEY或UNIQUE KEY,并且在声明没有错误的情况下会误认为。 确保您确实在查看数据库的同一实例。

此外,使用串插写SQL语句。 这很危险,而且也很难获得正确的答案(您可能知道考虑到其中一个字段有单引号)。 在SQLite中使用参数化语句非常非常简单。

该错误可能是由于INSERT INTO语句中的列名重复。 我猜这是一个错字,而您在INSERT INTO语句中的意思是column_name3。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM