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

SQLite如何基于提取的表数据创建新表?解决CREATE TABLE语法报错

错误原因

SQLite的CREATE TABLE ... AS SELECT语法不支持在AS关键字后为SELECT子句添加外层圆括号,你代码里的括号直接触发了语法报错,完全不需要先把查询结果读成pandas DataFrame再回写数据库。

修正方案

直接删除AS后包裹SELECT语句的那对圆括号即可,修正后的执行语句为:

create table if not exists T2 AS SELECT column1,column3 FROM T1 WHERE column3='a' GROUP BY column2

完整可运行代码如下:

import pandas as pd 
import sqlite3
df = pd.DataFrame(
    data={'column1': [10, 20, 30, 40], 
          'column2': [0, 1, 1, 0],
          'column3': ['a', 'b', 'a', 'b']})


dbname = 'TEST.db'
con = sqlite3.connect(dbname)
cur = con.cursor()
df.to_sql("T1", con, if_exists="replace", method="multi", chunksize=1000)
# 移除AS后SELECT外层的括号即可正常执行
con.execute("create table if not exists T2 AS SELECT column1,column3 FROM T1 WHERE column3='a' GROUP BY column2")

df_sqlquery = pd.read_sql_query(sql="SELECT * FROM T2", con=con)
# 用完记得关闭数据库连接
con.close()

print(df_sqlquery)
补充说明
  • 你当前SQL里GROUP BY column2没有对column1做聚合,SQLite默认配置下会返回每个分组下随机匹配的行,如果需要明确取分组内的特定值,建议搭配聚合函数使用,比如要取每个分组column1的最大值,可以写为SELECT max(column1) as column1, column3 FROM T1 WHERE column3='a' GROUP BY column2
  • 直接用SQL原生的CTAS(CREATE TABLE AS SELECT)语法在库内完成建表导数据,性能远高于把数据读到pandas再回写的方案,数据量越大优势越明显,没有特殊需求不需要做pandas层的中转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:33:29