Python - Sqlite插入没有自动增量主键值的元组

say*_*yth 1 python sqlite

我创建一个带有主键和自动增量的表。

with open('RAND.xml', "rb") as f, sqlite3.connect("race.db") as connection:
    c = connection.cursor()
    c.execute(
        """CREATE TABLE IF NOT EXISTS race(RaceID INTEGER PRIMARY KEY AUTOINCREMENT,R_Number    INT, R_KEY INT,\
        R_NAME TEXT, R_AGE INT, R_DIST TEXT, R_CLASS, M_ID INT)""")
Run Code Online (Sandbox Code Playgroud)

然后我想插入一个元组,它的数量当然比总列数少 1,因为第一个是自动增量。

 sql_data = tuple(b)
    c.executemany('insert into race values(?,?,?,?,?,?,?)', b)
Run Code Online (Sandbox Code Playgroud)

我该如何停止这个错误。

sqlite3.OperationalError: table race has 8 columns but 7 values were supplied
Run Code Online (Sandbox Code Playgroud)

hol*_*web 5

在列上假设特定的顺序是非常糟糕的做法。某些 DBA 可能会修改表,从而破坏您的 SQL 语句。其次,仅当您未在语句中为字段指定值时才会使用自动增量值INSERT- 如果您指定了值,则该值将存储在新行中。

如果你修改代码来读取

c.executemany('''insert into
            race(R_number, R_KEY, R_NAME, R_AGE, R_DIST, R_CLASS, M_ID)
            values(?,?,?,?,?,?,?)''',
            sql_data)
Run Code Online (Sandbox Code Playgroud)

您应该会发现一切都按预期进行。