Seite 1 von 2

Verfasst: Mittwoch 17. Februar 2010, 11:27
von heiliga horsd
Also, mit den Fragezeichen funktioniert es nun (danke für die Links, werde ich mir nochmal durchlesen).

Leider bekomme ich nachdem die Datenbank 64kb groß ist folgende Fehlermeldung:
cursor.execute(sql, list(map(urllib.parse.unquote_plus, line.split(','))))
sqlite3.OperationalError: unable to open database file
Hier nochmal der Quelltext:
http://paste.pocoo.org/show/179205/

Verfasst: Mittwoch 17. Februar 2010, 12:51
von heiliga horsd
Erstmal sorry für meine Doppelposts :oops:

So sieht es also jetzt aus:
http://paste.pocoo.org/show/179227/

Ich bekomme aber immer noch teilweise Fehlermeldungen, zum Teil, dass der Primary Key eindeutig sein muss (wenn ich dann das Programm ein zweites mal starte funktioniert es) und dass die Datenbank gesperrt ist (obwohl ich die Verbindung doch eigentlich getrennt habe) - wenn ich dann Python neu starte läuft hier auch wieder alles astrein.

Kann mir das jemand erklären warum sich das so verhält?

Verfasst: Mittwoch 17. Februar 2010, 13:00
von ms4py
Hier ein paar Tipps:
- Du solltest die Verbindung in einem try..finally Block schließen.
- Es gibt ``str.splitlines()``
- Normalerweise sollte man nie die allg. ``Exception`` abfangen, sondern immer die konkrete
- Eine Lösung mit ``executemany`` wäre vermutlich eine schnellere Alternative.

BTW: Wie sieht denn die Datei aus? Am besten mal ein paar Zeilen posten.

Verfasst: Mittwoch 17. Februar 2010, 13:11
von heiliga horsd
Danke für deine Antwort!
ice2k3 hat geschrieben:Hier ein paar Tipps:
- Du solltest die Verbindung in einem try..finally Block schließen.
Wie meinst du? Also das ganze Programm in einen try-Block setzen oder wie?
ice2k3 hat geschrieben:- Es gibt ``str.splitlines()``
Wozu ist das gut?
ice2k3 hat geschrieben: - Normalerweise sollte man nie die allg. ``Exception`` abfangen, sondern immer die konkrete
Danke für den Hinweis.
ice2k3 hat geschrieben: - Eine Lösung mit ``executemany`` wäre vermutlich eine schnellere Alternative.
Wo ist der Unterschied zu execute?
ice2k3 hat geschrieben: BTW: Wie sieht denn die Datei aus? Am besten mal ein paar Zeilen posten.
http://paste.pocoo.org/show/179227/

Verfasst: Mittwoch 17. Februar 2010, 13:29
von ms4py
heiliga horsd hat geschrieben:
ice2k3 hat geschrieben:Hier ein paar Tipps:
- Du solltest die Verbindung in einem try..finally Block schließen.
Wie meinst du? Also das ganze Programm in einen try-Block setzen oder wie?
Den Teil nach dem Öffnen der Verbindung und das Schließen dann ins finally.
heiliga horsd hat geschrieben:
ice2k3 hat geschrieben:- Es gibt ``str.splitlines()``
Wozu ist das gut?
Zeilenumbrüche sind nicht immer "\n", zum Teil gibt es auch "\r\n" oder ähnliches.
heiliga horsd hat geschrieben:
ice2k3 hat geschrieben: - Eine Lösung mit ``executemany`` wäre vermutlich eine schnellere Alternative.
Wo ist der Unterschied zu execute?
Das steht in der Doku...
heiliga horsd hat geschrieben:
ice2k3 hat geschrieben: BTW: Wie sieht denn die Datei aus? Am besten mal ein paar Zeilen posten.
http://paste.pocoo.org/show/179227/
Ich meine eigentlich die Textdatei, die du einliest...

Verfasst: Mittwoch 17. Februar 2010, 13:41
von heiliga horsd
OK danke dir, das mit den Umbrüchen wusst ich nicht, das executemany hab ich in der doku gelesen aber den Sinn nicht ganz verstanden... :(

Die Textdatei bekommst du hier als gzip-Archiv:
http://de48.die-staemme.de/map/player.txt.gz

Verfasst: Mittwoch 17. Februar 2010, 13:51
von mkesper
Schau dir mal csv.DictReader() an.

Verfasst: Mittwoch 17. Februar 2010, 14:15
von heiliga horsd
mkesper hat geschrieben:Schau dir mal csv.DictReader() an.
Entschuldige, aber ich verstehe nicht was du damit meinst? Das auslesen funktioniert in der jetzigen Form ja problemlos! Kannst du mir ein wenig näher erläutern, was du mit csv.DictReader meinst?

Verfasst: Mittwoch 17. Februar 2010, 15:14
von mkesper
Ah, sorry, du wolltest ja sqlite ausprobieren. Ansonsten würde dir evtl. ein Dictionary reichen. Jedoch würde ich immer das csv-Modul verwenden statt die Datei selbst zu zersägen. Aber das ist wohl Geschmackssache.