1

我正在尝试使用 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

phpliteadmin 中显示的数据库模式

这是生成的数据库的屏幕截图:

phpliteadmin 中显示的结果数据库

4

2 回答 2

1

如果您的语句正确执行,则不会发生这种情况。

我注意到您没有检查代码中的错误。你应该这样做!

我的猜测是已经创建了没有auto_increment属性的表。正在生成错误,create table您正在插入旧版本。

您可以通过在创建表之前删除它来解决此问题。您还应该修改代码以检查错误。

于 2020-12-30T13:10:07.133 回答
1

我的猜测是您正在使用带有 phpliteadmin 而不是 MySql 的 SQLite,在这种情况下:

id INTEGER AUTO_INCREMENT PRIMARY KEY

不是自增主键的正确定义。

实际上,该列的数据类型设置为,INTEGER AUTO_INCREMENT如图3.1 所示。柱亲和性的测定,具有亲和性。 尽管如此,它是表格的,但这允许值。phpliteadminINTEGER
PRIMARY KEYNULL

具有整数主键的正确语法是这样的:

id INTEGER PRIMARY KEY AUTOINCREMENT 
于 2020-12-30T13:50:24.393 回答