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

SQL语法错误求助:near "."报错及Python数据库操作代码修复

修复SQL语法错误(near "." : syntax error)

错误原因分析

你的代码存在两个核心问题引发语法错误:

  • 主键自增语法错误:SQLite中AUTOINCREMENT必须与INTEGER类型声明绑定,不能单独写在PRIMARY KEY的括号内。
  • 表名未正确包裹:如果传入的table参数包含.(比如类似db.table的格式),直接写入SQL语句会被解析为数据库与表的分隔符,导致语法报错,必须用引号包裹表名。

修复后的代码

def createTable(table):
    c = conn.cursor()
    # 修正主键语法,同时确保表名被双引号包裹
    c.execute('''
        CREATE TABLE IF NOT EXISTS "{tablename}" (
        "id"    INTEGER PRIMARY KEY AUTOINCREMENT,
        "snapshotTime"  TEXT NOT NULL,
        "open_ask"  REAL NOT NULL,
        "open_bid"  REAL NOT NULL,
        "close_ask" REAL NOT NULL,
        "close_bid" REAL NOT NULL,
        "high_ask"  REAL NOT NULL,
        "high_bid"  REAL NOT NULL,
        "low_ask"   REAL NOT NULL,
        "low_bid"   REAL NOT NULL
    );'''.format(tablename=table)
    )
    conn.commit()

def loadData(table, data):
    createTable(table)
    c = conn.cursor()
    # INSERT语句中的表名同样用双引号包裹
    c.executemany('''
        INSERT INTO "{tablename}" 
        (snapshotTime, open_ask, open_bid, close_ask, close_bid, 
        high_ask, high_bid, low_ask, low_bid) 
        VALUES (?,?,?,?,?,?,?,?,?);'''.format(tablename=table), data)
    conn.commit()

关键修复点说明

  • 主键语法修正:将PRIMARY KEY("id" AUTOINCREMENT)改为"id" INTEGER PRIMARY KEY AUTOINCREMENT,这是SQLite支持自增主键的标准写法。
  • 表名包裹处理:在CREATE TABLE和INSERT INTO语句中,均用双引号"{tablename}"包裹表名,即使表名包含.、空格等特殊字符,也能被SQLite正确识别,避免near "."的语法错误。
  • 移除了冗余的"转义,Python三引号多行字符串可直接使用双引号,代码可读性更强。

内容的提问来源于stack exchange,提问作者TrueTina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:25:02