我使用PeeWee ORM进行以下查询:
query = DataModel.select()where(DataModel.field == "value")
有没有办法将query
转换为pandas DataFrame而不必迭代所有值?我正在寻找一种更“Pythonic”的做法。
我使用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())
。
如果有人发现这个有用的话,我正在搜索相同的转换,但在Python 3中。受@toto_tico之前的答案的启发,我想到了这个:
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
进行检查。
df = pd.read_sql(query.sql()[0], database.connection())
您需要直接访问peewee 数据库
,例如,在快速入门教程中对应的内容为:
db = SqliteDatabase('people.db')
import peewee as pw;
database_proxy = pw.Proxy()
那么连接就在这里:
database_proxy.obj.connection()
query.sql()[0]
返回的字符串中包含 %s
占位符的情况? - LivingSilver94cursor = db.cursor()
然后 pd.read_sql(cursor.mogrify(*query.sql()), ...)
- user5915738
list(query.dicts())
将会失败... 有人遇到过同样的问题吗? - toto_ticopd.DataFrame(query.dicts())
- Nicola