gpt4 book ai didi

python - sqlite3中整数主键没有自动增量

转载 作者:IT老高 更新时间:2023-10-28 20:46:59 26 4
gpt4 key购买 nike

在 sqlite3 faq ,提到了一个整数主键被提供一个空值将自动递增。但这不会发生在我身上。

复制,sqlite3中的一个表,CREATE TABLE dummy(serial_num INTEGER PRIMARY KEY, name TEXT);并使用python填充,

import sqlite3 as lite
con = lite.connect('some.db')
cur=con.cursor()
data = "someone's name"
cur.execute("INSERT INTO dummy VALUES(NULL, ?)", data)
con.commit()

第一个属性 serial_num 显示为空白,而 name 属性很好。当我执行 SELECT serial_num FROM dummy 时,我只会得到一堆空格。我做错了什么?

最佳答案

这是 SQLite 的怪癖之一。来自 fine manual :

According to the SQL standard, PRIMARY KEY should always imply NOT NULL. Unfortunately, due to a long-standing coding oversight, this is not the case in SQLite. Unless the column is an INTEGER PRIMARY KEY SQLite allows NULL values in a PRIMARY KEY column. We could change SQLite to conform to the standard (and we might do so in the future), but by the time the oversight was discovered, SQLite was in such wide use that we feared breaking legacy code if we fixed the problem.

关于 INTEGER PRIMARY KEY 的文档有点不清楚列究竟需要什么才能成为这个自动递增的特殊 INTEGER PRIMARY KEY 但现实情况是,如果您想使用 NULL 值来表示“给我下一个”,那么该列需要不是 NULL插入时自动递增值:

create table dummy (
serial_num integer primary key not null,
name text
);

如果你省略了 not null,你需要像这样插入:

insert into dummy (name) values (?)

获取 serial_num 的自动增量值。否则,SQLite 无法区分 NULL 表示“给我下一个自动增量值”和 NULL 表示“在 serial_num 中放置一个 NULL 值,因为该列允许 NULL”。

关于python - sqlite3中整数主键没有自动增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com