使用pandas sqldf创建表及插入数据失败求助
解决pandasql创建表后查询提示“no such table”的问题
问题重现
执行以下代码时,创建表后查询会抛出OperationalError: no such table: mytable错误:
pip install -U pandasql from pandasql import sqldf sqldf("create table mytable (id integer, name text)") sqldf("select * from mytable")
问题原因
pandasql默认每次调用sqldf()都会新建一个独立的SQLite临时连接,连接执行完毕后会自动关闭,之前创建的表也会随连接销毁,导致后续调用无法访问已创建的表。
解决方法
方法1:使用全局上下文共享连接
创建一个复用连接的pandasql上下文,让所有SQL操作在同一个连接中执行:
from pandasql import sqldf # 定义复用全局连接的查询函数 pysqldf = lambda q: sqldf(q, globals()) # 创建表 pysqldf("create table mytable (id integer, name text)") # 插入数据 pysqldf("insert into mytable values (1, 'abc')") pysqldf("insert into mytable values (2, 'def')") pysqldf("insert into mytable values (3, 'ghk')") # 查询表 result = pysqldf("select * from mytable") print(result)
方法2:单次调用执行多段SQL语句
用分号分隔多个SQL操作,在一次sqldf调用中完成创建、插入和查询:
from pandasql import sqldf # 一次性执行所有SQL操作 result = sqldf(""" create table mytable (id integer, name text); insert into mytable values (1, 'abc'); insert into mytable values (2, 'def'); insert into mytable values (3, 'ghk'); select * from mytable; """) print(result)
说明
- 方法1适合需要拆分多次执行不同SQL操作的场景,连接会持续保留直到程序结束。
- 方法2适合一次性完成所有操作的场景,无需维护持久连接。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

