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

如何使用SQLAlchemy执行SQL查询并将结果导入pandas DataFrame

问题解决方法

报错根因

你遇到的AttributeError: 'ResultProxy' object has no attribute 'all'报错是SQLAlchemy版本差异导致的:1.4版本以前的SQLAlchemy查询返回ResultProxy对象,获取全量结果的方法为fetchall(),all()是1.4及以上版本新增的Result对象的方法。

修复同步查询代码

from sqlalchemy import text

with engine.connect() as conn:
    result = conn.execute(text("select * FROM users"))
    # 低版本SQLAlchemy替换为fetchall()即可
    print(result.fetchall())

查询结果转pandas DataFrame

方式1:同步查询直接转换

pandas原生支持从SQLAlchemy连接读取数据,无需手动解析查询结果:

import pandas as pd
from sqlalchemy import text

with engine.connect() as conn:
    df = pd.read_sql_query(text("SELECT * FROM users"), conn)
print(df.head())

方式2:适配异步环境的查询转换

你当前使用的是FastAPI异步架构+databases异步连接池,建议优先用异步查询避免阻塞事件循环,直接复用你已经初始化的database对象即可:

import pandas as pd
from sqlalchemy import text

# 可直接写在FastAPI异步路由中
@app.get("/query-users")
async def query_users():
    query = text("SELECT * FROM users")
    # 异步执行查询
    result = await database.fetch_all(query)
    # 转换为DataFrame
    df = pd.DataFrame([dict(row) for row in result])
    # 按需处理df后返回即可
    return {"total": len(df), "data": df.to_dict(orient="records")}

可选优化

如果需要使用all()方法,可将SQLAlchemy升级到1.4及以上版本,升级前注意核对已有代码的API兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:54:03