Seite 1 von 1

Anfängerkinderfrage: mysql und suche nach bestimmtem Datum

Verfasst: Mittwoch 28. Oktober 2009, 11:30
von doca82
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

Re: Anfängerkinderfrage: mysql und suche nach bestimmtem Dat

Verfasst: Mittwoch 28. Oktober 2009, 11:53
von Pekh
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?

Verfasst: Mittwoch 28. Oktober 2009, 12:07
von doca82
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?

Verfasst: Mittwoch 28. Oktober 2009, 12:21
von Pekh
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.

Verfasst: Mittwoch 28. Oktober 2009, 12:29
von doca82
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

Re: Anfängerkinderfrage: mysql und suche nach bestimmtem Dat

Verfasst: Mittwoch 28. Oktober 2009, 15:18
von ms4py
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!

Verfasst: Mittwoch 28. Oktober 2009, 17:03
von doca82
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? ;)

Verfasst: Mittwoch 28. Oktober 2009, 17:08
von Hyperion
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/

Verfasst: Mittwoch 28. Oktober 2009, 18:03
von ms4py
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 ;)