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

使用SQLAlchemy与Pandas转换DataFrame时‘非可执行对象’报错求助

解决方法:Not an executable object 错误

出现这个错误是因为SQLAlchemy 2.0+版本对可执行对象的要求更严格,直接传入字符串SQL语句不再被识别为可执行对象,以下是两种可行的修复方案:

方案1:用SQLAlchemy的text()包裹SQL语句

通过text()方法将字符串SQL转换为SQLAlchemy可识别的可执行对象,需要先导入text工具:

from sqlalchemy import create_engine, text
import pandas as pd  # 必须导入pandas,你的代码中遗漏了这一行

engine = create_engine("mysql+pymysql://mariadb:mariadb@localhost:9051/mariadb")

def user_detail(req, id):
    conn = engine.connect()
    QLoanParcel = text("SELECT * FROM LoanParcel")  # 用text包裹SQL语句
    dfParcel = pd.read_sql(QLoanParcel, conn)
    conn.close()
    df = dfParcel.drop(["id", "date_add", "start_date"], axis = 1)
    return render(req,'pages/user_detail.html')

方案2:直接传递engine给pd.read_sql(更简洁)

pd.read_sql可以直接接收SQLAlchemy引擎对象,无需手动创建和关闭连接,内部会自动处理连接生命周期:

from sqlalchemy import create_engine
import pandas as pd

engine = create_engine("mysql+pymysql://mariadb:mariadb@localhost:9051/mariadb")

def user_detail(req, id):
    QLoanParcel = "SELECT * FROM LoanParcel"
    dfParcel = pd.read_sql(QLoanParcel, engine)  # 直接传入engine
    df = dfParcel.drop(["id", "date_add", "start_date"], axis = 1)
    return render(req,'pages/user_detail.html')

额外注意事项

  • 你的代码中缺少import pandas as pd语句,这会导致pd未定义的错误,必须补充。
  • 如果是pandas版本过低导致的兼容性问题,可升级pandas到最新稳定版:
    pip install --upgrade pandas
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:28