将SQLAlchemy ORM转换为pandas DataFrame
这个话题在这里或其他地方还没有得到解决。 有没有解决scheme将SQLAlchemy <Query object>
转换为pandasDataFrame?
pandas有能力使用pandas.read_sql
但这需要使用原始的SQL。 我有两个原因希望避免它:1)我已经拥有了一切使用ORM(本身是一个很好的理由)和2)我使用Python列表作为查询的一部分(例如: .db.session.query(Item).filter(Item.symbol.in_(add_symbols)
其中Item
是我的模型类, add_symbols
是一个列表)。这是SQL SELECT ... from ... WHERE ... IN
的等价物。
有什么可能吗?
以下应该在大多数情况下工作:
df = pd.read_sql(query.statement, query.session.bind)
有关参数的更多信息,请参阅pandas.read_sql
文档。
只是为了让新手的pandas程序员更加清楚,这里就是一个具体的例子,
pd.read_sql(session.query(Complaint).filter(Complaint.id == 2).statement,session.bind)
在这里,我们select一个来自投诉表(sqlalchemy模型是投诉)与id = 2的投诉
所选的解决scheme不适合我,因为我一直在收到错误
AttributeError:'AnnotatedSelect'对象没有属性'lower'
我发现以下工作:
df = pd.read_sql_query(query.statement, engine)
如果你想编译一个带有参数和方言特定参数的查询,使用如下所示:
c = query.statement.compile(query.session.bind) df = pandas.read_sql(c.string, query.session.bind, params=c.params)