将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)