我有一个执行一些简单SQL的python脚本。
c.execute("CREATE TABLE IF NOT EXISTS simpletable (id integer PRIMARY KEY, post_body text, post_id text, comment_id text, url text);")
command = "INSERT OR IGNORE INTO simpletable VALUES ('%s', '%s', '%s', '%s')" % (comments[-1].post_body, comments[-1].post_id, comments[-1].comment_id,
comments[-1].url)
c.execute(command)
c.commit()
但是当我执行它时,我得到一个错误
sqlite3.OperationalError:表simpletable有5列,但提供了4个值
为什么不自动填写id
键?
答案 0 :(得分:0)
如果您未指定目标列,VALUES
将为所有列提供值,而您没有这样做。
INSERT
OR IGNORE INTO simpletable
(text,
post_id,
comment_id,
text)
VALUES ('%s',
'%s',
'%s',
'%s');
在任何情况下都建议指定目标列。如果由于任何原因,表中列的顺序发生变化,查询将不会中断。
答案 1 :(得分:0)
尝试指定列名称,以确保值的目的地不取决于顺序。 例如:
INTO simpletable (文本, post_id, comment_id, 文字)
如果您希望id列自动增加,请确保添加Identity属性,或类似的dbms自动增加。 例如:
在不存在simpletable的情况下创建表(id整数PRIMARY KEY Identity(1,1),
,请记住,您的脚本不准备更改表结构,只准备创建。
答案 2 :(得分:0)
在Python 3.6中,我如下所示进行操作,并成功插入了数据。
由于找不到None
,因此我使用Null
作为自动递增ID。
conn.execute("INSERT INTO CAMPAIGNS VALUES (?, ?, ?, ?)", (None, campaign_name, campaign_username, campaign_password))
ID结构如下。
ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL