如何使用 PeeWee 将 select 查询转换为 pandas DataFrame

How to convert a select query into a pandas DataFrame using PeeWee

使用 PeeWee ORM 我有以下查询:

query = DataModel.select()where(DataModel.field == "value")

有什么方法可以在不遍历所有值的情况下将 query 转换为 pandas DataFrame 吗?我正在寻找一种更 "Pythonic" 的方法。

假设 querypeewee.SelectQuery 类型,你可以这样做:

df = pd.DataFrame(list(query.dicts()))

编辑: 正如 Nicola 在下面指出的那样,您现在可以直接 pd.DataFrame(query.dicts())

以下是更高效的方式,因为它避免了创建列表然后将其传递给pandas数据框。它还具有 保留列顺序的附带好处 :

df = pd.read_sql(query.sql()[0], database.connection())

你需要直接访问peeweedatabase,比如在quickstart tutorial对应:

db = SqliteDatabase('people.db')

当然,您也可以创建自己的数据库连接。

缺点:如果你在两个表中有重复的列,你应该小心,例如id 列将出现两次。因此,请确保在继续之前更正这些内容。


如果您使用 peewee 代理

import peewee as pw; 
database_proxy = pw.Proxy()

那么连接在这里:

database_proxy.obj.connection()

以防万一有人觉得这有用,我正在搜索相同的转换,但在 Python 3 中。受到 的启发,这就是我想出的:

import pandas
import peewee


def data_frame_from_peewee_query(query: peewee.Query) -> pandas.DataFrame:
    connection = query._database.connection()  # noqa
    sql, params = query.sql()
    return pandas.read_sql_query(sql, connection, params=params)

检查 Python 3.9.6pandas==1.3.2peewee==3.14.4,使用 peewee.SqliteDatabase