SQLite3 语法错误:无法在 Python 中创建表

-1 投票
1 回答
37 浏览
提问于 2025-04-14 16:44

我在搭建数据库的时候遇到了一个问题。每次我尝试运行下面这个函数时,就会出现一个不明的语法错误。

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,
                        FOREIGN KEY (user_id) REFERENCES users(user_id),
                        device_name TEXT,
                        device_type TEXT,
                        north_cord TEXT,
                        east_cord TEXT,
                        timestamp TEXT
                    )""")
create_all_sql()

错误信息:

Traceback (most recent call last):
  File "", line 28, in <module>
    create_all_sql()
  File "", line 15, in create_all_sql
    c.execute("""CREATE TABLE IF NOT EXISTS devices (
sqlite3.OperationalError: near "device_name": syntax error

我试着搜索了一些类似的问题,但没有找到相关的答案。有没有人能帮我理解一下这个错误可能是什么原因造成的,以及怎么解决它?任何帮助都非常感谢。谢谢!

1 个回答

0

你忘记保存数据库的更改了

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,
                        FOREIGN KEY (user_id) REFERENCES users(user_id),
                        device_name TEXT,
                        device_type TEXT,
                        north_cord TEXT,
                        east_cord TEXT,
                        timestamp TEXT
                    )""")
        con.commit()
        con.close()
create_all_sql()

撰写回答