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

