【发布时间】:2015-10-28 06:53:17
【问题描述】:
这个问题感觉非常简单,但我一直无法找到答案。
我有一个 ORM 查询对象,比如说
query_obj = session.query(Class1).join(Class2).filter(Class2.attr == 'state')
我可以像这样将它读入数据框:
testdf = pd.read_sql(query_obj.statement, query_obj.session.bind)
但我真正想做的是使用传统的 SQL 查询而不是 ORM:
with engine.connect() as connection:
# Execute the query against the database
results = connection.execute(query_obj)
# Fetch all the results of the query
fetchall = results.fetchall()
# Build a DataFrame with the results
dataframe = pd.DataFrame(fetchall)
其中 query 是一个传统的 SQL 字符串。现在,当我运行此程序时,出现“query_obj 不可执行”的错误任何人知道如何将 ORM 查询转换为传统查询?另外在获取数据框后如何获取列?
我这样做的原因:我已经在我的数据库之上设置了一个 ORM 层,并使用它来将数据查询到 Pandas DataFrame。它有效,但它经常耗尽我的记忆。我想通过一些字符串折叠来减少内存开销(此处概述的第 3 步:http://www.mobify.com/blog/sqlalchemy-memory-magic/)。这要求(如果我在这里错了,请纠正我)不使用 read_sql 字符串,而是将查询的返回作为原始元组处理。
【问题讨论】:
-
您的问题到底是什么?只是如何将 fetchall 的结果放入数据框中?此外,上面的代码有什么问题?我觉得很好。
-
列名可以从
fetchall.keys()获取 -
我进行了编辑以澄清我的问题。我只是不清楚如何将 ORM query_obj 转换为 SQL 字符串。
-
:) 我看到了答案。如果你发帖我会给你答案!
标签: pandas sqlalchemy