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
相关产品推荐
相关产品推荐

