2017-05-08 7 views
-1

Ich versuche, die Werte in zwei Spalten zusammenzufassen und meine Datumsfelder am Tag zu verkürzen. Ich habe die SQL-Abfrage erstellt, dies zu tun (das funktioniert):peewee select() gibt SQL-Abfrage zurück, nicht die tatsächlichen Daten

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; 

Aber ich dann auf Probleme stoßen, wenn ich versuche, dies in peewee zu formatieren:

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') 

bekomme ich nicht Fehler, aber wenn ich die Variable ich dies in gespeichert ausdrucken, es zeigt:

<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'] 

Das einzige, was ich in Python geschrieben haben, Daten zu erhalten, erfolgreich ist:

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

Antwort

0

Wenn Sie einfach eine Zeichenkette mit/orden bei Ihrer Gruppe anheften, wird Peewee versuchen, sie als Wert zu parametrisieren. Dies soll SQL-Injektion haxx vermeiden.

das Problem zu lösen, Sie SQL('Day') anstelle von 'Day' innerhalb der group_by() und order_by() Anrufe verwenden können.

Eine andere Möglichkeit besteht darin, den Funktionsaufruf einfach in GROUP BY und ORDER BY zu stecken. Hier ist, wie Sie das tun würde:

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)) 

Oder, wenn Sie bevorzugen:

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'))) 
+0

Danke, das hat mir sehr geholfen. Ich war auch ein wenig verwirrt, wie man auf die Daten zugreift, und endete damit, die Abfrage mit einer for-Schleife zu durchlaufen. –

Verwandte Themen