IntegrityError:列名1不是唯一的

时间:2016-06-17 19:41:47

标签: sql

每次我运行此代码时,我都会得到"列名称1不是唯一的"。为什么呢?

graph = fb.graph.api(token)
f = graph.get_object(cat = 'single', id = '765898450131958', fields=           ['likes'])
strona = f['id']
liczbalajkow = f['likes']
print liczbalajkow
conn = sqlite3.connect('fb_likes2.sqlite')
cur = conn.cursor()
cur.execute('''
CREATE TABLE IF NOT EXISTS Likes (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, name1 TEXT UNIQUE PRIMARY KEY, likes_count INTEGER, date DATES)''');   
cur.execute('''INSERT INTO Likes (name1, likes_count, date)
VALUES ( ?, ?, ? )''', ( strona, liczbalajkow, date.today(), ) );
conn.commit()

2 个答案:

答案 0 :(得分:1)

可能只是因为它是真的并且你试图违反name1上的UNIQUE CONSTRAINT。您的CREATE TABLE语句将字段name1定义为唯一:name1 TEXT UNIQUE PRIMARY KEY

答案 1 :(得分:0)

原因是,您正在尝试为列' name1'插入表格重复条目。 很可能你在一些循环中调用此命令,从FB接收的数据包含多个搜索结果的相同页面名称。 也可能是您没有删除旧数据库(来自上一次运行)。

您可以尝试显示或保存到您尝试插入表格的日志文件值。

正确的解决方案是创建表外循环。 应该是这样的:

  1. 打开数据库连接
  2. 如果不存在则创建表
  3. 清除表中的记录(以避免重复)
  4. 启动FB查询循环
  5. 将记录插入数据库
  6. 闭环
  7. 关闭数据库连接