Seite 1 von 1

Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 16:23
von Duesentrieb
Hallo,

ich möchte in einer Datenbank die Datensätze abfragen die innerhalb eines Tages angelegt wurden.
In der Tabelle gibt es die Spalte timestamp mit der Unixzeit.

Leider funktioniert mein Ansatz nicht:

Code: Alles auswählen


aktuellezeit = time.time()
startzeit = Aktuellezeit - 86400

cursor.execute ("select * FROM data WHERE (timestamp > startzeit) and (timestamp < aktuellezeit)")

Kann mir jemand helfen?

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 16:40
von __deets__
Du musst die Argumente uebergeben. Einfach irgendwelche Namen im SQL zu ersetzen waere ja nun eine ziemliche Katastrophe, oder? Denn du koennstest ja auch timestamp in deinem Code stehen haben, und woher soll dein Programm/Python dann wissen, das das aber bitteschoen nicht zu ersetzen ist?

Fuer diesen Zweck gibt es daher die parametrisierte Form von execute, zB so:

Code: Alles auswählen

cursor.execute ("select * FROM data WHERE (timestamp > ?) and (timestamp < ?)", (startzeit, aktuellezeit))
Ob es wirklich ? oder ein anderer Platzhalter in deinem Code sein soll, haengt davon ab, welche konkrete DB du verwendest. Das steht in dessen Dokumentation.

Edit: Schreibfehler, L statt ? getippt.

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 16:56
von __blackjack__
Wobei die Klammern im SQL überflüssig sind und SQL ``… BETWEEN … AND …`` kennt, was es IMHO leichter lesbar macht. Sofern man mit ≤ und ≥ für die Randwerte leben kann.

Wobei das ganze natürlich ein bisschen wackelig wird, denn man wird das Programm ja nie in genau 86.400 Sekunden-Abständen laufen haben, so das immer ein bisschen Überlappung oder eine Lücke entsteht bei der Abfrage, so dass man am Ende Datensätze nicht erfasst und welche mehrmals erfasst. Und ob die Uhrzeit auf dem Rechner wo die DB und damit die SQL-Abfrage abgearbeitet wird, und auf dem Rechner wo die Vergleichszeiten erzeugt werden, wirklich synchron laufen, ist auch noch mal eine Unwägbarkeit bei diesem Ansatz.

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:05
von Duesentrieb
Hallo,
besten Dank für die Hinweise!
Klar, jetzt fällt es mir wieder ein dass es nicht so einfach war. Es müssen wohl % Platzhalter sein.
Jetzt habe ich ein Formatproblem:

query = query % args
ValueError: incomplete format

In der Datenbank bekomme ich das Format mit "BIGINT" ausgewiesen.
Das müsste doch eigentlich passen?

Edit: es muss ein %s sein. Damit ist das Formatproblem auch behoben!

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:07
von __deets__
Das ist kein Python, und nur irgendeine hingeworfene Umschreibung einer Fehlermeldung. Was ausser "haste halt falsch gemacht" soll man da jetzt zu sagen? Zeig was du wirklich fuer Code hast, und zeig, wie die wirkliche Fehlermeldung aussieht. Wie immer, oder?

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:21
von Duesentrieb
Aber trotzdem muss ich noch einmal eine Frage stellen:
In der Datenbank hat der Zeitwert 13 Stellen: 164203984581
In Python bekomme ich einen Kommawert der noch dazu drei Stellen am Ende hat: 1642958303.0946624

Gibt es eine Lösung den Pythonwert zu reduzieren? Multiplizieren um das Komma zu schieben brachte leider nichts

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:22
von Duesentrieb
__deets__ hat geschrieben: Sonntag 23. Januar 2022, 18:07 Das ist kein Python, und nur irgendeine hingeworfene Umschreibung einer Fehlermeldung. Was ausser "haste halt falsch gemacht" soll man da jetzt zu sagen? Zeig was du wirklich fuer Code hast, und zeig, wie die wirkliche Fehlermeldung aussieht. Wie immer, oder?
Ist doch erledigt. Hab den Fehler mit %s behoben

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:23
von __deets__
Die Loesung liegt darin, statt den unterspezifizierten UNIX Timestamps (welche Zeitzone, Sommerzeit oder Winterzeit?) gleich die richtigen Datentypen zu benutzen. Auf beiden Seiten, also TIMESTAMP in der Datenbank, und datetime.datetime in Python. Dann verschwinden diese Probleme weitgehend.

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:24
von __deets__
Duesentrieb hat geschrieben: Sonntag 23. Januar 2022, 18:22 Ist doch erledigt. Hab den Fehler mit %s behoben
War es nicht, als ich die Antwort schrieb. Und die Anmerkungen dazu, wie man richtig Fehler beschreibt, behalten ja nun auch ihre Gueltigkeit, oder nicht?

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:33
von Duesentrieb
__deets__ hat geschrieben: Sonntag 23. Januar 2022, 18:24
Duesentrieb hat geschrieben: Sonntag 23. Januar 2022, 18:22 Ist doch erledigt. Hab den Fehler mit %s behoben
War es nicht, als ich die Antwort schrieb. Und die Anmerkungen dazu, wie man richtig Fehler beschreibt, behalten ja nun auch ihre Gueltigkeit, oder nicht?
Dann warst du aber sehr schnell. Aber Recht hast du!

Re: Datensätze mit Unixzeit abfragen

Verfasst: Sonntag 23. Januar 2022, 18:35
von Duesentrieb
__deets__ hat geschrieben: Sonntag 23. Januar 2022, 18:23 Die Loesung liegt darin, statt den unterspezifizierten UNIX Timestamps (welche Zeitzone, Sommerzeit oder Winterzeit?) gleich die richtigen Datentypen zu benutzen. Auf beiden Seiten, also TIMESTAMP in der Datenbank, und datetime.datetime in Python. Dann verschwinden diese Probleme weitgehend.
Leider kann ich die Ursprungsdatenbank bzw. das Programm welches die befüllt nicht ändern.
Ich multipliziere jetzt mit 1000, dann klappt es.

Wenn es dann Überschneidungen gibt geht das im Rauschen unter