我正在尝试使用 python 创建一个数据库来执行 SQL 命令(针对 CS50x 问题集 7)。
我创建了一个表,其中
id
字段设置为 AUTO_INCREMENT
,但数据库中的字段仅由 NULL
值 填充。我只是希望它有一个从 1 开始递增的 id。
我尝试在网上搜索,看看我是否使用了正确的语法,但找不到任何明显的东西,也找不到其他有类似问题的人,所以任何帮助将不胜感激。
这是我正在运行的 SQL 命令:
# For creating the table
db.execute("""
CREATE TABLE students (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
middle_name VARCHAR(255) DEFAULT (NULL),
last_name VARCHAR(255) NOT NULL,
house VARCHAR(10),
birth INTEGER
);
""")
# An example insert statement
db.execute("""
INSERT INTO students (
first_name,
middle_name,
last_name,
house,
birth
)
VALUES (
?, ?, ?, ?, ?
);
""", "Harry", "James", "Potter", "Gryffindor", 1980)
这是
phpliteadmin
中显示的数据库架构的屏幕截图:
这是生成的数据库的屏幕截图:
我的猜测是您正在使用 SQLite 和 phpliteadmin 而不是 MySql,在这种情况下是这样的:
id INTEGER AUTO_INCREMENT PRIMARY KEY
不是 自增主键的正确定义。
事实上,该列的数据类型设置为
INTEGER AUTO_INCREMENT
,如phpliteadmin
中所示,根据3.1。测定柱亲和力,具有INTEGER
亲和力。PRIMARY KEY
,但这允许 NULL
值。拥有整数主键的正确语法是这样的:
id INTEGER PRIMARY KEY AUTOINCREMENT
如果你的语句执行正确,这种情况就不会发生。
我注意到您没有检查代码中的错误。你应该这样做!
我的猜测是,该表是已经创建的,没有
auto_increment
属性。 create table
正在生成错误,您正在插入旧版本。
您可以通过在创建表之前删除该表来解决此问题。您还应该修改代码以检查错误。
SQLite CREATE 语句的正确语法是:
创建表学生( id 整数, 名字 VARCHAR(255) NOT NULL, middle_name VARCHAR(255) 默认值 (NULL), 姓氏 VARCHAR(255) NOT NULL, 房子 VARCHAR(10), 出生整数, 主键(id自动增量) )