You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Cython编译后Pandasql执行sqldf查询报sqlite3表不存在错误

解决Cython编译后Pandasql找不到DataFrame的问题

嘿,我碰到过类似的坑!这问题本质上是Cython编译后的函数命名空间和普通Python函数不一样导致的:pandasql的sqldf默认会自动从调用它的函数的局部命名空间里查找DataFrame对应的表名,但Cython会改变内部命名空间的结构,让sqldf没法自动找到你定义的dataf变量,所以才会抛出no such table: dataf的异常。

解决方案:显式传递命名空间给sqldf

你只需要在调用sqldf的时候,手动把包含dataf的命名空间字典传进去,就能绕过这个问题。具体修改你的processor.pyx代码如下:

import pandas as pd
from pandasql import sqldf

def process_date(json):
    # json格式为[{"x": "1", "y": "2", "z": "3"}]
    dataf = pd.read_json(json, orient='records')
    
    # 核心修改:构造包含DataFrame的命名空间字典,键名要和SQL里的表名一致
    query_namespace = {'dataf': dataf}
    # 执行查询时通过globals参数传入这个命名空间
    # 这里替换成你的实际查询语句即可
    result = sqldf("SELECT * FROM dataf", globals=query_namespace)
    
    # 后续处理result的逻辑...
    return result

原理说明

sqldfglobals参数允许我们手动指定查询时使用的命名空间,这样就不用依赖它自动检测调用上下文的命名空间了。通过把dataf放进字典里传给globals,pandasql就能明确找到对应的DataFrame,并把它注册成SQLite的临时表供查询使用。

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

火山引擎 最新活动