Python und pysqlite wollen nicht miteinander

Probleme bei der Installation?
_Sebastian_
User
Beiträge: 21
Registriert: Sonntag 16. April 2006, 12:48

Das listet bei mir ganz genau das gleiche auf.

Ich habe anscheinend doch noch nicht alle Reste von den selbstgebauten sqlite/pysqlite-Versionen gelöscht. Wie kann ich denn sicherstellen, dass ich alles gelöscht habe? Bzw. woher weiß ich, was wo hinkopiert wurde?
BlackJack

Die setup.py Skripte sind beim Installieren normalerweise recht "redseelig". Ist zwar nicht die schönste Variante, aber nochmal installieren und schauen wo was hin kopiert wird, hilft vielleicht.

Hast Du das eigene `pysqlite2` über ein bereits installiertes Paket gebügelt? Dann reicht es vielleicht schon das Paket nochmal zu installieren.
_Sebastian_
User
Beiträge: 21
Registriert: Sonntag 16. April 2006, 12:48

Ja, ich habe über ein bestehendes Paket installiert. Aber das Paket habe ich mittlerweile öfter vollständig entfernt, neu runtergeladen, und drüberinstalliert (per apt-get), als ich zählen kann.

Der interessante Part der Ausgabe von setup.py ist
copying build/lib.linux-i686-2.4/pysqlite2/__init__.py -> /usr/lib/python2.4/site-packages/pysqlite2
copying build/lib.linux-i686-2.4/pysqlite2/dbapi2.py -> /usr/lib/python2.4/site-packages/pysqlite2
copying build/lib.linux-i686-2.4/pysqlite2/test/__init__.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/dbapi.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/factory.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/hooks.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/regression.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/transactions.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/types.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
copying build/lib.linux-i686-2.4/pysqlite2/test/userfunctions.py -> /usr/lib/python2.4/site-packages/pysqlite2/test
Es ist also alles in /usr/lib/python2.4/site-packages/pysqlite2 und wenn ich da ein rm -r pysqlite2 setze und das Paket nochmal drüberinstalliere, tut sich bei der Fehlermeldung leider gar nichts.
BlackJack

Es müsste da irgendwo noch eine `_sqlite.so` geben. Vielleicht hast Du davon noch eine "falsche" irgendwo rumliegen!?
_Sebastian_
User
Beiträge: 21
Registriert: Sonntag 16. April 2006, 12:48

Ja, die ist auch in /pysqlite2, die habe ich allerdings ebenfalls gelöscht. Nachdem ich dann python-pysqlite2 wieder installiert habe, war sie wieder, da, sollte also die richtige Version sein.

ldd _sqlite.so ergibt
linux-gate.so.1 => (0xffffe000)
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0xb7ecf000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7ebd000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d8e000)
/lib/ld-linux.so.2 (0x80000000)

Kann es an /usr/lib/libsqlite3.so.0 liegen?
BlackJack

Ist die denn von Dir oder aus einem Paket?
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

@ blackjack:
Nachdem ich dann python-pysqlite2 wieder installiert habe, war sie wieder, da, sollte also die richtige Version sein.
das sollte deine frage beantworten...
http://www.cs.unm.edu/~dlchao/flake/doom/
BlackJack

Nein das beantwortet meine Frage nicht. Ich fragte nach der `/usr/lib/libsqlite3.so.0` und nicht der `_sqlite.so`.
_Sebastian_
User
Beiträge: 21
Registriert: Sonntag 16. April 2006, 12:48

Die ist von libsqlite3-0

Ich habe jetzt nochmals ALLES, was mit sqlite zusammenhängt, vollständig entfernt und installiere jetzt gerade python nochmal.

Alles, was ich dann im Anschluss machen muss, ist python-pysqlite2 zu installieren, richtig? Er installiert dann noch die Pakete libsqlite3-0 und python2.4-pysqlite mit, und dann sollte doch eigentlich alles funktionieren. Aber der Fehler bleibt?!
_Sebastian_
User
Beiträge: 21
Registriert: Sonntag 16. April 2006, 12:48

Habs geschafft :)
Wo genau der Fehler war, weiß ich nicht, aber nachdem ich alles, was *sqlite* im Namen hatte, mit dem Paketmanager entfernt habe und die neuesten Versionen aus den sources neukompiliert habe (vorher in setup.cfg die dirs anpassen; /usr/local/include und /usr/local/lib), hats funktioniert, NACHDEM ich folgendes ausprobiert habe:
export LD_LIBRARY_PATH=/usr/local/lib

Danke für die Hilfe
Dragonito
User
Beiträge: 19
Registriert: Mittwoch 22. März 2006, 07:31
Wohnort: Bonn
Kontaktdaten:

Hi Leute,

habe versucht dieses SQLitebeispiel durchzukauen. Bei mir gestalltet sich folgendes Problem hier erstmal mein Code (Zum Teil auskommentiert wegen DB Anlage und Inserts):

Code: Alles auswählen

from pysqlite2 import dbapi2 as sqlite

con = sqlite.connect("testdb")

cur = con.cursor()

who = "Melanie"

#cur.execute("CREATE TABLE people ( name TEXT, age INT )")
#cur.execute("INSERT INTO people VALUES ('Melanie', 33)")
#cur.execute("INSERT INTO people VALUES ('Robin', 27)")

cur.execute("select age from people where name='" + who + "'")

print cur.fetchone()
Also erst hab ich die DB angelegt und die Inserts gefahren, danach wollte ich die Daten abrufen. Das wenn ich alles in einem Rutsch durchführe bekomme ich die gewollte 33 wenn ich aber später nur den Select durchführe findet der nix. Es kommt mir so vor als ob die DB beim Aufruf des Scriptes gelöscht wird.

Hab das hier nur mal so zum SQLitetesten ausprobiert, also nur rein aus interesse, jetzt möchte ich natürlich, das es auch funktioniert *g*... Ne andere Variante hab ich mit dem SQLAlchemy gebaut die klappte soweit.

Lieben Gruss

Robin

Kleiner Nachtrag ich verwende die Pakete die direkt von Ubuntu mitgeliefert werden :-)
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Ändere den Verbindungsaufbau auf etwa dies

Code: Alles auswählen

self.conn = sqlite3.connect(db, isolation_level = None)
also füge isolation_level = None hinzu
BlackJack

Das liegt daran, dass Du nirgends `commit()` aufrufst, also die Daten wirklich dauerhaft in die DB übernimmst. Wenn alles in einem Rutsch durchgeführt wird, dann passiert alles innerhalb einer Transaktion. Das "funktioniert", nur das die Änderungen ohne `commit()` beim Skriptende wieder rückgängig gemacht werden.
Dragonito
User
Beiträge: 19
Registriert: Mittwoch 22. März 2006, 07:31
Wohnort: Bonn
Kontaktdaten:

ahh super con.commit() funktioniert prächtig, wieder was dazu gelernt. Orientiert sich anscheinend an der "Python Database API Specification v2.0" oder gibts da größere Unterschiede?
BlackJack

Daran orientieren sich eigentlich alle vernünftigen Datenbankmodule.
Antworten