You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:24:59