Python中sqlite3 cursor.execute触发OperationalError问题排查求助
问题根源与解决方案
你的错误完全来自SQL语句的语法问题,具体是这一行:
ID PRIMARY KEY (NAME,NAME)
这行写法不符合SQLite的语法规范:
- 如果你想定义
ID为主键列,需要明确指定列类型(比如INTEGER),并使用列级约束的写法:ID INTEGER PRIMARY KEY - 如果你想把
NAME和LASTNAME设为复合主键,不需要单独的ID列,应该把主键约束放在所有列定义之后
修正方案1:使用自增ID主键
适合需要唯一ID标识每条记录的场景:
import sqlite3 def table_personal_data(): conn = sqlite3.connect('mailroom.db') cursor = conn.cursor() sql='''CREATE TABLE IF NOT EXISTS DONORS( ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME VARCHAR(40) NOT NULL, LASTNAME VARCHAR(40) NOT NULL, EMAIL VARCHAR(50) NOT NULL, DRIVER_LICENSE VARCHAR(50) NOT NULL)''' cursor.execute(sql) conn.commit() cursor.close() conn.close() table_personal_data()
修正方案2:使用复合主键(NAME + LASTNAME)
适合用姓名组合作为唯一标识的场景:
import sqlite3 def table_personal_data(): conn = sqlite3.connect('mailroom.db') cursor = conn.cursor() sql='''CREATE TABLE IF NOT EXISTS DONORS( NAME VARCHAR(40) NOT NULL, LASTNAME VARCHAR(40) NOT NULL, EMAIL VARCHAR(50) NOT NULL, DRIVER_LICENSE VARCHAR(50) NOT NULL, PRIMARY KEY (NAME, LASTNAME))''' cursor.execute(sql) conn.commit() cursor.close() conn.close() table_personal_data()
内容的提问来源于stack exchange,提问作者A A
相关产品推荐
相关产品推荐

