peewee select()返回SQL查询,而不是实际的d

2024-04-26 00:05:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将两列中的值相加,并按天截断日期字段。我构造了一个SQL查询来完成这个任务(这很有效):

SELECT date_trunc('day', date) AS Day, SUM(fremont_bridge_nb) AS 
Sum_NB, SUM(fremont_bridge_sb) AS Sum_SB FROM bike_count GROUP BY Day 
ORDER BY Day;

但当我试图将其格式化为peewee时,我遇到了一些问题:

^{pr2}$

我没有发现任何错误,但当我打印出存储在其中的变量时,它显示:

 <class 'models.Bike_Count'> SELECT date_trunc(%s, "t1"."date") AS 
Day, SUM("t1"."fremont_bridge_nb") AS Sum_NB, 
SUM("t1"."fremont_bridge_sb") AS Sum_SB FROM "bike_count" AS t1 ORDER 
BY %s ['day', 'Day']

我用Python编写的唯一成功获取数据的方法是:

 Bike_Count.get(Bike_Count.id == 1).date

Tags: datebyascountselectbridgesumt1
1条回答
网友
1楼 · 发布于 2024-04-26 00:05:09

如果您只是将一个字符串粘贴到groupby/orderby中,Peewee将尝试将其参数化为一个值。这是为了避免SQL注入haxx。在

要解决这个问题,可以在group_by()order_by()调用中使用SQL('Day')来代替{}。在

另一种方法是将函数调用粘贴到GROUP BYORDER BY。你可以这样做:

day = fn.date_trunc('day', Bike_Count.date)
nb_sum = fn.SUM(Bike_Count.fremont_bridge_nb)
sb_sum = fn.SUM(Bike_Count.fremont_bridge_sb)

query = (Bike_Count
         .select(day.alias('Day'), nb_sum.alias('Sum_NB'), sb_sum.alias('Sum_SB'))
         .group_by(day)
         .order_by(day))

或者,如果您愿意:

^{pr2}$

相关问题 更多 >