Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python peewee select()返回SQL查询,而不是实际数据_Python_Sql_Postgresql_Peewee - Fatal编程技术网

Python peewee select()返回SQL查询,而不是实际数据

Python peewee select()返回SQL查询,而不是实际数据,python,sql,postgresql,peewee,Python,Sql,Postgresql,Peewee,我尝试将两列中的值相加,并按天截断日期字段。我构造了SQL查询来实现这一点(这是可行的): 但当我试图将其格式化为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'

我尝试将两列中的值相加,并按天截断日期字段。我构造了SQL查询来实现这一点(这是可行的):

但当我试图将其格式化为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']

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

要解决此问题,您可以在
groupby()
order\u by()调用中使用
SQL('Day')
代替
'Day'

另一种方法是将函数调用粘贴到
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')))

谢谢,这帮了大忙。我还对如何访问数据感到有点困惑,最后用for循环迭代查询。
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')))