我创建一个带有主键和自动增量的表。
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)
在列上假设特定的顺序是非常糟糕的做法。某些 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)
您应该会发现一切都按预期进行。