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

ccl*_*oyd 6 python sql sqlite

我有一个 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()
Run Code Online (Sandbox Code Playgroud)

但是当我执行它时,我收到错误

sqlite3.OperationalError:表 simpletable 有 5 列,但提供了 4 个值

为什么它不自动填写密钥id

Ron*_*bet 8

在Python 3.6中,我做了如下所示,数据已成功插入。

我用于None自动递增 ID,因为Null找不到。

conn.execute("INSERT INTO CAMPAIGNS VALUES (?, ?, ?, ?)", (None, campaign_name, campaign_username, campaign_password))
Run Code Online (Sandbox Code Playgroud)

ID结构如下。

ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
Run Code Online (Sandbox Code Playgroud)


sti*_*bit 6

如果您没有指定目标列,VALUES则预计会为所有列提供值,而您没有这样做。

INSERT
 OR IGNORE INTO simpletable
                (text,
                 post_id,
                 comment_id,
                 text)
                VALUES ('%s',
                        '%s',
                        '%s',
                        '%s');
Run Code Online (Sandbox Code Playgroud)

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