Umwandlung einer langen Zahl aus Datenbank verhindern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Chriggi
User
Beiträge: 2
Registriert: Freitag 3. August 2012, 11:15

Servus,

ich möchte den aktuellsten "timestamp" aus meiner Datenbank in eine Datei speichern. Die timestamps sind relativ lange Zahlen, z.B. "1342184977273". Wenn ich nun folgendes durchführe:

Code: Alles auswählen

SELECTQ="SELECT max(timestamp) FROM xxx"
FILENAME="last_timestamp.csv"
dump_writer = csv.writer(open(FILENAME,'w'), delimiter=',',quotechar="'")
cursor = db.cursor()
cursor.execute(SELECTQ)
result = cursor.fetchall()
for record in result:   
    dump_writer.writerow(record)
Dann speichert er folgenden Wert in die Datei: 1.34389796569e+12

Das Problem ist nun, dass ich damit nicht weiterarbeiten kann wenn ich die Datei auslese. Eine einfache Umwandlung in ein Int oder Long funktioniert wegen dem "e" auch nicht. Weiß jemand eine Lösung für dieses Problem?
deets

Falsches DB-Design wuerde ich sagen. Solche Daten sollte schon in der DB als TimeStamp abgelegt sein - dann kommen sie auch schon gleich als datettime-Objekte aus der Datenbank raus, und du kannst sie formatieren, wie du magst. Vorzugsweise *nicht* als simple, lange Zahl.

Wenn das nicht aenderbar ist, dann solltest du schon im select die Zahl gleich in einen String umwandeln. Wie genau das geht haengt von deiner akuten Datenbank ab, die erwaehnst du ja nicht.

Last but not least: benutze bitte die python-code-tags wenn du code postest.
Chriggi
User
Beiträge: 2
Registriert: Freitag 3. August 2012, 11:15

Direkt im Select das ganze zum String umwandeln hat funktioniert.

Danke für die schnelle Hilfe.
BlackJack

@Chriggi: Noch ein paar Anmerkungen:

CSV-Dateien solltest Du im Binärmodus öffnen, sonst kann es unter Betriebssystemen Probleme geben die Zeilenende-Zeichen beim schreiben und lesen nicht unverändert lassen (→ Windows).

Dateien sollte man auch immer schliessen und sich nicht auf die Speicherbereinigung verlassen, die keine Garantien gibt ob und wann sie ausgeführt wird. Am besten man verwendet die ``with``-Anweisung.

Da es nur einen Maximalwert geben kann ist `fetchall()` + Schleife übertieben. Ein einfaches ``dump_writer.writerow(cursor.fetchone())`` sollte genügen. Eventuell muss man sich dann Gedanken über den Sonderfall machen dass die Tabelle leer ist.
Antworten