如何使用 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" 的方法。
假设 query
是 peewee.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.6、pandas==1.3.2
和 peewee==3.14.4
,使用 peewee.SqliteDatabase
。
使用 PeeWee ORM 我有以下查询:
query = DataModel.select()where(DataModel.field == "value")
有什么方法可以在不遍历所有值的情况下将 query
转换为 pandas DataFrame 吗?我正在寻找一种更 "Pythonic" 的方法。
假设 query
是 peewee.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.6、pandas==1.3.2
和 peewee==3.14.4
,使用 peewee.SqliteDatabase
。