2016-09-06 7 views
0

Ich habe SQLite-Datenbank mit Tabellen, die Daten enthält. Ich möchte Datensätze auswählen, die in einen bestimmten Bereich fallen, aber ich kann keine korrekte Abfrage schreiben.Wie Abfrage Datumsbereich mit Peewee?

# This query returns nothing 
rows = model.select().where( 
       (model.date.between(start_date, end_date)) & 
       (model.name == point_name) 
     ).tuples() 


# This query returns nothing too 
rows = model.select().where( 
       (model.date > start_date) & 
       (model.date < end_date) & 
       (model.name == point_name) 
     ).tuples() 


# However tis one works: 
rows = model.select().where( 
      (model.date > start_date) & 
      (model.name == point_name) 
     ).tuples() 

Warum mein Code funktioniert, wenn die Abfragedaten, die entweder begger oder kleiner als die gegebene und nicht, wenn ich versuche, Datumsbereich abzufragen?

Antwort

3

Wie speichern Sie Ihre Daten in der Datenbank? War das eine vorbestehende Datenbank oder haben Sie Peewee verwendet, um alle Datensätze einzufügen? Ich frage, weil SQLite ein Datum entweder als String oder als Zahl (Timestamp) darstellen kann. Wenn Sie eine Zeichenkette verwenden, müssen die Daten lexikografisch sortiert werden, um aussagekräftige Vergleiche zu ermöglichen ... deshalb verwendet Peewee YYYY-mm-dd.

Wenn Ihre Daten korrekt sortiert sind, sollten Sie .between() verwenden können, wenn Sie Endpunkte inklusiv haben möchten. Sonst können Sie tun (date_field > low) & (date_field < high)

+0

Ich habe peewee zu erstellen und bevölkern Datenbank und peewee Speicherdaten als 'dd-mm-YYYY' in der Datenbank verwendet –

+0

Das ist sehr seltsam, peewee speichert sie als JJJJ-MM-TT standardmäßig. Auf jeden Fall ist das der Grund, warum dein Code kaputt ist. – coleifer

Verwandte Themen