Anfängerkinderfrage: mysql und suche nach bestimmtem Datum

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

Hallo Leute,
hier mal wieder eine wahrscheinlich lächerlich einfache Frage, auf die ich aber nach jetzt 4 Stunden googeln und rumprobieren nicht komme...

Wie kann ich mir datensätze mit einem bestimmten Datum aus einer msql-Datenbank holen, die in einer Tabelle mit einer spalte "listed_since" (in datetime format) untersucht werden?

Hier mein Ansatz:

Code: Alles auswählen

datum =  '2008-10-27'
cursor.execute("SELECT * FROM customers WHERE listed_since = %s" %(datum))

Ausgabe ist "none", obwohl der Datensatz mit "2008-10-27 22:07:45" in der Spalte steht?!?!

Denke es liegt an dem format der Variable "datum", aber wie löse ich das das Problem?

Grüße
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

doca82 hat geschrieben:

Code: Alles auswählen

datum =  '2008-10-27'
cursor.execute("SELECT * FROM customers WHERE listed_since = %s" %(datum))

Dein Ansatz ist schon fast richtig, nur handelt es sich hierbei leider nicht um das klassische String-Formatting von Python. Die Zeile müßte so aussehen:

Code: Alles auswählen

datum =  '2008-10-27'
cursor.execute("SELECT * FROM customers WHERE listed_since = %s", (datum))

(ungetestet, müßte aber stimmen)

Nachtrag: Eventuell prüft die Datenbank auch auf die Uhrzeit. Hast du die obenstehende Abfrage mal direkt in der Datenbank ausgeführt? Hat er den Datensatz dort gefunden?
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

vielen Dank.

Da bin ich schon mal auf dem richtigen weg...

beim phpmyadmin in der sql befehlskonsole gibt er mir ein "null" raus, was mit der ausgabe über den cursor "none" wohl übereinstimmt.

Ja das feld hat tatsächlich auch eine Uhrzeit...muss isch da was im Befehl ergänzen? Irgendwas formatieren mit str_to_date oder Ähnliches?
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Du müßtest entweder die Uhrzeit mit in deinen Vergleichsstring mit aufnehmen (weil er sonst vermutlich von 00:00:00 ausgeht), oder das datetime-Feld, das du ja in deiner Tabelle hast, in der Abfrage in ein Datum umwandeln. Da bin ich in MySQL aber nicht mehr firm genug. Dritte Möglichkeit: Nicht auf Gleichheit testen, sondern auf ungefähre Übereinstimmung (" x between a and b"). Je nach Anwendung würde ich aber die Möglichkeiten 2 und 1 (in dieser Reihenfolge) bevorzugen.
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

vielen dank nochmals...ja das mit so einem intervall werd ich mal probieren vielleicht kennt ja noch jemand möglichkeit 1, also nur das Datum ausgeben zu lassen...

Bis später hoffentlich mit der Lösung ;-P
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Mit http://dev.mysql.com/doc/refman/5.1/en/ ... ction_date

Code: Alles auswählen

datum =  '2008-10-27'
cursor.execute("SELECT * FROM customers WHERE DATE(listed_since) = DATE(%s)", (datum,))
Ungetestet.

@Pekh: Beachte das Komma hinter Datum, der zweite Parameter von execute muss explizit zu einem Tupel umgewandelt werden!
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

vielen Dank ;))) klappt

du hast mit echt geholfen. Das mit dem KOmma hinter date versteh ich nicht so recht. Du machst das, damit ein tuple entsteht richtig? Und warum muss das ein tuple sein? Kann man dazu was lesen? ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

doca82 hat geschrieben:vielen Dank ;))) klappt

du hast mit echt geholfen. Das mit dem KOmma hinter date versteh ich nicht so recht. Du machst das, damit ein tuple entsteht richtig? Und warum muss das ein tuple sein? Kann man dazu was lesen? ;)
Jo, PEP 249:
http://www.python.org/dev/peps/pep-0249/
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Hyperion hat geschrieben: Jo, PEP 249:
http://www.python.org/dev/peps/pep-0249/
Oder kurz und knapp:
Weil das in der DB-API so spezifiziert ist ;)
Antworten