2016-08-19 4 views
2

Ich benutze SQLObject, ein Wrapper für Python zur Verwaltung von SQL-Abfragen, mit Python 2.7. Ich weiß, ich kann Daten auswählen, indem Sie einen Wörterbuch mit wie:Python SQL-Objekt Auswahl von Daten nach Wörterbuch und Datum

restrictions = { ... } 
selection = sql_table.selectBy(**restrictions).orderBy('-createdtime') 

Ich kann auch für Datum abfragen, indem Sie:

selection = sql_table.select(sql_table.q.creatdtime>=datetime.datetime(year, month, day, 0, 0, 0, 0) 

Allerdings mag ich zusammen mit dem Datum sortieren, beide verwenden, wie sowie die Wörterbuchpaarungen. Wenn ich versuche, sie so zusammenzusetzen:

selection = sql_table.select(**restrictions, sql_table.q.creatdtime>=datetime.datetime(year, month, day, 0, 0, 0, 0) 

Es funktioniert nicht. Gibt es eine Möglichkeit, die SQL-Abfrage nach einem Datetime-Bereich und nach der Wörterbuchpaarung zu filtern?

Antwort

2

Das Problem wurde behoben. Wenn Sie hier mit dem gleichen Problem konfrontiert sind, hier ist die Lösung:

Da der SQLObject-Wrapper für Python direkte Eingabe von SQL-Abfragen unterstützt, entschied ich mich, es selbst zu erstellen. Zuerst entpacke ich alle Einschränkungen als Abfrage

Ich wollte dann eine Einschränkung basierend auf meinen Daten hinzufügen. Ich wusste, dass die Spalte in meiner Datenbank, das Datum und Uhrzeit gespeichert wurde CreatedTime genannt, so habe ich die Zeichenfolge als

select_string += " AND " + 'createdtime>=' + '"' + str(datetime.datetime(year, month, day, 0, 0, 0, 0)) + '"' 

Hinweis Beachten Sie die Anführungszeichen um das Datetime-Objekt, auch wenn es als String gegossen wurde, es muss noch die Anführungszeichen haben, um zu funktionieren.

Daher meine letzte Code sieht wie folgt aus:

select_string = " AND ".join(str(key) + "=" + str(restrictions[key]) for key in restrictions.keys()) 
if date1: 
    select_string += " AND " + 'createdtime>=' + '"' + str(datetime.datetime(year, month, day, 0, 0, 0, 0)) + '"' 
if date2: 
    select_string += " AND " + 'createdtime<=' + '"' + str(datetime.datetime(year2, month2, day2, 0, 0, 0, 0)) + '"' 
selection = sql_table.select(select_string).orderBy('-createdtime') 
return selection 
Verwandte Themen