我尝试将两列中的值相加并按日截断我的日期字段。我构建了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时,我会遇到问题:
Bike_Count.select(fn.date_trunc('day', Bike_Count.date).alias('Day'),
fn.SUM(Bike_Count.fremont_bridge_nb).alias('Sum_NB'),
fn.SUM(Bike_Count.fremont_bridge_sb).alias('Sum_SB'))
.group_by('Day').order_by('Day')
我没有收到任何错误,但是当我打印出我存储的变量时,它会显示:
<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
答案 0 :(得分:0)
如果您只是按顺序将一个字符串粘贴到您的组中,Peewee将尝试将其作为值进行参数化。这是为了避免SQL注入haxx。
要解决此问题,您可以在SQL('Day')
和'Day'
来电中使用group_by()
代替order_by()
。
另一种方法是将函数调用粘贴到GROUP BY
和ORDER 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))
或者,如果您愿意:
query = (Bike_Count
.select(day.alias('Day'), nb_sum.alias('Sum_NB'), sb_sum.alias('Sum_SB'))
.group_by(SQL('Day'))
.order_by(SQL('Day')))