Python 如何将Sqlalchemy表对象转换为DataFrame?

Python 如何将Sqlalchemy表对象转换为DataFrame?,python,pandas,sqlalchemy,Python,Pandas,Sqlalchemy,是否可以将检索到的SqlAlchemy表对象转换为Pandas DataFrame,或者是否需要为此编写特定的函数?我想我以前已经尝试过了。这是一个很粗糙的方法,但对于整个表ORM查询结果,这应该可以工作: import pandas as pd cols = [c.name for c in SQLA_Table.__table__.columns] pk = [c.name for c in SQLA_Table.__table__.primary_key] tuplefied_list

是否可以将检索到的SqlAlchemy表对象转换为Pandas DataFrame,或者是否需要为此编写特定的函数?

我想我以前已经尝试过了。这是一个很粗糙的方法,但对于整个表ORM查询结果,这应该可以工作:

import pandas as pd

cols = [c.name for c in SQLA_Table.__table__.columns]
pk = [c.name for c in SQLA_Table.__table__.primary_key]
tuplefied_list = [(getattr(item, col) for col in cols) for item in result_list]

df = pd.DataFrame.from_records(tuplefied_list, index=pk, columns=cols)

部分查询结果(名为tuples)也可以工作,但您必须构造数据框
索引
,以匹配您的查询。

这可能不是最有效的方法,但我使用
automap\u base
来反映数据库表,然后将其转换为数据框

import pandas as pd
from sqlalchemy.ext.automap import automap_base
from sqlalchemy import create_engine
from sqlalchemy.orm import Session

connection_string = "your:db:connection:string:here"
engine = create_engine(connection_string, echo=False)
session = Session(engine)

# sqlalchemy: Reflect the tables
Base = automap_base()
Base.prepare(engine, reflect=True)

# Mapped classes are now created with names by default matching that of the table name.
Table_Name = Base.classes.table_name

# Example query with filtering
query = session.query(Table_Name).filter(Table_Name.language != 'english')

# Convert to DataFrame
df = pd.read_sql(query.statement, engine)
df.head()

您考虑过使用吗?是的,但是SqlAlchemy在我的项目中还有其他用例。pandas.read\u sql可以使用SqlAlchemy引擎。如果您想使用其他可选的而不仅仅是表格(包括使用orm),请查看:只需使用
pandas.read\u sql
和SqlAlchemy引擎。非常简单。如何在ORM查询中使用
pandas.read\u sql
,例如:
session.query(MyORMTable).limit(100).all()
pandas.read\u sql\u table('MyTable',MySQLEngine)
请看这里非常酷。但是,它看起来没有转换现有的查询结果(或者使用ORM),这就是我解释原始问题的方式。这里的
result\u list
是什么?我在尝试运行此操作时出错。我还希望将现有的查询结果转换为pandas数据帧(而不是仅仅加载一个直接的表),我对这一结果和上面的(更高投票率)答案进行了基准测试。这个答案除了更简单外,速度大约是原来的两倍。干得好。还有,谢谢。