SQLite3语法错误:Python中创建数据表失败求助
问题分析与修复:SQLite创建表时的语法错误
错误原因
SQLite的CREATE TABLE语法要求,表级外键约束必须放在所有列定义之后。你在devices表的user_id TEXT列定义后直接插入了外键约束,打乱了列定义的顺序,导致SQL解析器无法识别后续的device_name列,从而触发语法错误。
修复方法
将外键约束移到devices表所有列定义的末尾,调整后的代码如下:
import sqlite3 def create_all_sql(): with sqlite3.connect("data.db", check_same_thread=False) as con: c = con.cursor() c.execute("""CREATE TABLE IF NOT EXISTS users ( user_id TEXT UNIQUE PRIMARY KEY, user_name TEXT, hashed_password BLOB, hashed_salt BLOB, device_ver BLOB UNIQUE )""") c.execute("""CREATE TABLE IF NOT EXISTS devices ( device_id BLOB UNIQUE PRIMARY KEY, user_id TEXT, device_name TEXT, device_type TEXT, north_cord TEXT, east_cord TEXT, timestamp TEXT, FOREIGN KEY (user_id) REFERENCES users(user_id) )""") create_all_sql()
修改说明
把原本插在列之间的外键约束语句FOREIGN KEY (user_id) REFERENCES users(user_id)移到了最后一列timestamp TEXT之后,完全符合SQLite的表创建语法规则,解析器可以正确解析所有列和约束,避免语法错误。
内容的提问来源于stack exchange,提问作者user23582105
相关产品推荐
相关产品推荐

