SQLite with Python“表有X列,但提供了Y列”

2024-06-01 00:56:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它执行一些简单的SQL。在

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: table simpletable has 5 columns but 4 values were supplied

为什么它不自动填充id键?在


Tags: text脚本idurlexecutesqlifcreate
3条回答

如果不指定目标列,VALUES将为所有列提供值,而您没有这样做。在

INSERT
 OR IGNORE INTO simpletable
               (text,
                post_id,
                comment_id,
                text)
               VALUES ('%s',
                       '%s',
                       '%s',
                       '%s');

在任何情况下,都建议指定目标列。如果由于任何原因,表中列的顺序发生更改,则查询不会中断。在

尝试指定列名称以确保值的目标不依赖于顺序。 例如:

INTO simpletable (text, post_id, comment_id, text)

如果希望id列自动递增,请确保在dbms中添加Identity属性,或类似的自动递增。 例如:

CREATE TABLE IF NOT EXISTS simpletable (id integer PRIMARY KEY Identity(1,1),

请记住,您的脚本不准备更改表结构,只准备创建。在

在Python3.6中,我做了如下所示的操作,并且成功地插入了数据。在

由于找不到Null,我使用了None作为自动递增的ID。在

conn.execute("INSERT INTO CAMPAIGNS VALUES (?, ?, ?, ?)", (None, campaign_name, campaign_username, campaign_password))

ID结构如下。在

^{pr2}$

相关问题 更多 >