Hallo,
ich habe Probleme mit dem Zusammenspiel zwischen pysqlite 2.3.2 (sqlite 3.3.6) und Python 2.4.3 auf Ubuntu 6.04.
Greife ich mit
>>> from pysqlite2 import dbapi2 as sqlite
auf pysqlite zu und führe dann irgendeine Datenbankoperation aus, meldet er mir stets "unsupported file format".
Da der Fehler auftritt, wenn eine ältere Version von (py)sqlite auf eine Datenbank zugreift, die mit einer neueren Version erstellt wurde UND
bei mir noch die Packete python2.4-sqlite bzw python-sqlite (interface to sqlite 2) installiert sind, die ich aufgrund von Abhängigkeiten aber nicht rausschmeissen kann, vermute ich, dass da irgendwas schief läuft und es daran liegt.
Habe leider keine Idee, wie ich das überprüfen bzw. lösen kann, hoffe, dass das hier jemand weiß
Sebastian
Python und pysqlite wollen nicht miteinander
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das Format der SQLite Datenbanken wird ab und zu verändert, daher kann es sein, dass dein SQLite einfach zu "neu" ist für die Datenbankdatei.
Aber python-sqlite welches von python2.4-sqlite abhängt ist doch schon in einer verwendbaren Version in Ubuntu. Warum willst du sie deinstallieren?
Aber python-sqlite welches von python2.4-sqlite abhängt ist doch schon in einer verwendbaren Version in Ubuntu. Warum willst du sie deinstallieren?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 21
- Registriert: Sonntag 16. April 2006, 12:48
Ich erstelle die Datenbanken aber selber
z.B. mit:
sqlite3 testdb
create table people(name text, age numeric);
Daran sollte es doch nicht liegen?
Die Packete python-sqlite/python2.4-sqlite sind ein "interface to SQLite 2" (aus der Beschreibung). Deswegen meine Vermutung, dass die noch von Python verwendet werden, da dann wirklich eine ältere Version auf eine DB neueren Formats zugreifen würde.
Ich habe dann zuerst die Sources (sowohl von sqlite als auch von pysqlite) heruntergeladen und kompiliert. Als dann besagter Fehler auftrat, habe ich es auch noch mit apt-get probiert und habe jetzt eben noch das Packet python2-4-pysqlite2 installiert, aber das hat nichts geändert.
Gibt es etwas in der Art von
>>> from pysqlite2 import info
>>> info.info()
Pysqlite version x.xx?
z.B. mit:
sqlite3 testdb
create table people(name text, age numeric);
Daran sollte es doch nicht liegen?
Die Packete python-sqlite/python2.4-sqlite sind ein "interface to SQLite 2" (aus der Beschreibung). Deswegen meine Vermutung, dass die noch von Python verwendet werden, da dann wirklich eine ältere Version auf eine DB neueren Formats zugreifen würde.
Ich habe dann zuerst die Sources (sowohl von sqlite als auch von pysqlite) heruntergeladen und kompiliert. Als dann besagter Fehler auftrat, habe ich es auch noch mit apt-get probiert und habe jetzt eben noch das Packet python2-4-pysqlite2 installiert, aber das hat nichts geändert.
Gibt es etwas in der Art von
>>> from pysqlite2 import info
>>> info.info()
Pysqlite version x.xx?
Zuletzt geändert von _Sebastian_ am Montag 3. Juli 2006, 19:57, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du brauchst python-sqlite2 um auf sqlite3 datenbanken zuzugreifen. Installier das am besten über APT und lösch vorher das selbstkompilierte komplett.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 21
- Registriert: Sonntag 16. April 2006, 12:48
Habe ich getan, hat leider am Fehler nichts geändert.
Habe jetzt folgende Pakete installiert:
python2.4-pysqlite2
python2.4-sqlite
python-pysqlite2
python-sqlite
Merkwürdig?
Edit:
Vielleicht bin ich ja auch auf dem falschen Dampfer? Ich poste mal meinen Code, der den Fehler auslöst, vielleicht hat es ja gar nichts mit den Versionen zu tun. Andererseits ist das fast 1:1 aus dem pysqlite-manual übernommen:
Traceback (most recent call last):
File "dbtest.py", line 10, in ?
cur.execute("select name_last, age from people where name_last=? and age=?", (who, age))
pysqlite2.dbapi2.OperationalError: unsupported file format
Habe jetzt folgende Pakete installiert:
python2.4-pysqlite2
python2.4-sqlite
python-pysqlite2
python-sqlite
Merkwürdig?
Edit:
Vielleicht bin ich ja auch auf dem falschen Dampfer? Ich poste mal meinen Code, der den Fehler auslöst, vielleicht hat es ja gar nichts mit den Versionen zu tun. Andererseits ist das fast 1:1 aus dem pysqlite-manual übernommen:
Code: Alles auswählen
from pysqlite2 import dbapi2 as sqlite
con = sqlite.connect("testdb")
cur = con.cursor()
who = "mustermann"
age = 30
cur.execute("select name_last, age from people where name_last=? and age=?", (who, age))
print cur.fetchone()
File "dbtest.py", line 10, in ?
cur.execute("select name_last, age from people where name_last=? and age=?", (who, age))
pysqlite2.dbapi2.OperationalError: unsupported file format
das ist alles komplett korekt!
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi _Sebastian_!_Sebastian_ hat geschrieben:Gibt es etwas in der Art von
>>> from pysqlite2 import info
>>> info.info()
Pysqlite version x.xx?
Ja, so etwas gibt es:
Code: Alles auswählen
>>> from pysqlite2 import dbapi2 as sqlite
>>> sqlite.version
'2.3.2'
>>> sqlite.sqlite_version
'3.3.6'
>>>
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hm, bei mir funktioniert es:
Das Python-Programm sieht fast so aus wie Deins, nur das ich `name_last` durch `name` ersetzt habe, damit es zum ``create`` passt:
Ergebnis:
Klar, weil keine Werte in der Tabelle stehen. Aber keine Ausnahme. Benutze ebenfalls Dapper und habe alle Pakete aus dem Repository und nichts davon selbst übersetzt.
Es könnten also noch irgendwelche Überreste von der selbst übersetzten Bibliothek schuld sein.
Code: Alles auswählen
$ sqlite3 testdb
SQLite version 3.2.8
Enter ".help" for instructions
sqlite> create table people(name text, age numeric);
Code: Alles auswählen
from pysqlite2 import dbapi2 as sqlite
con = sqlite.connect("testdb")
cur = con.cursor()
who = "mustermann"
age = 30
cur.execute("select name, age from people where name=? and age=?", (who, age))
print cur.fetchone()
Code: Alles auswählen
$ python test.py
None
Es könnten also noch irgendwelche Überreste von der selbst übersetzten Bibliothek schuld sein.
-
- User
- Beiträge: 21
- Registriert: Sonntag 16. April 2006, 12:48
Hmmm
Nicht unbedingt die allerneuersten Versionen.
Blackjack, bzgl. der Überreste - ich habe schon alles rausgelöscht, soweit ich das überblicken kann. Das Buildverzeichnis und /usr/lib/ und /usr/include bereinigt.
Habe auch schon alle Pakete, die mit sqlite zusammenhängen, nochmals installiert (diesmal allerdings mit apt), das hat auch nichts gebracht.
*ratlos*
Der Test funktioniert übrigens ebenfalls nicht
>>> from pysqlite2 import test
>>> test.test()
.........................................................E................EEEFE..............FE......FEF......FFE..................FFFFFFEE...EEEEEE...........EEEEFESegmentation fault
Der ist allerdings wohl nicht so aussagekräftig, ich habe da schon mal deswegen in der pysqlite-Mailliste nachgefragt, der Test schlägt aufgrund von Bugs manchmal fehl, auch wenn alles funktioniert.
Code: Alles auswählen
>>> from pysqlite2 import dbapi2 as sqlite
>>> sqlite.version
'2.0.5'
>>> sqlite.sqlite_version
'3.2.8'
Blackjack, bzgl. der Überreste - ich habe schon alles rausgelöscht, soweit ich das überblicken kann. Das Buildverzeichnis und /usr/lib/ und /usr/include bereinigt.
Habe auch schon alle Pakete, die mit sqlite zusammenhängen, nochmals installiert (diesmal allerdings mit apt), das hat auch nichts gebracht.
*ratlos*
Der Test funktioniert übrigens ebenfalls nicht
>>> from pysqlite2 import test
>>> test.test()
.........................................................E................EEEFE..............FE......FEF......FFE..................FFFFFFEE...EEEEEE...........EEEEFESegmentation fault
Der ist allerdings wohl nicht so aussagekräftig, ich habe da schon mal deswegen in der pysqlite-Mailliste nachgefragt, der Test schlägt aufgrund von Bugs manchmal fehl, auch wenn alles funktioniert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Kannst ja mal schauen, ob der PySQLite-Pfad bei dir der gleiche ist wie bei mir (sollte es, wenn du über APT installiert hast):
@BlackJack: Gibt es bei IPython eine Option, die das zusätzliche Newline bei In[1] nicht ausgibt, sondern eher wie der normale Interpreter funktioniert? Ich konnte in der Dokumentation irgendwie nichts finden.
Code: Alles auswählen
In [1]: from pysqlite2 import dbapi2 as sqlite
In [2]: sqlite.__file__
Out[2]: '/usr/lib/python2.4/site-packages/pysqlite2/dbapi2.pyc'
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wo hast Du diesen Test her? Bei mir gibt's den nicht! Hast Du auch das Python-Binding selbst gebaut?_Sebastian_ hat geschrieben:Blackjack, bzgl. der Überreste - ich habe schon alles rausgelöscht, soweit ich das überblicken kann. Das Buildverzeichnis und /usr/lib/ und /usr/include bereinigt.
Habe auch schon alle Pakete, die mit sqlite zusammenhängen, nochmals installiert (diesmal allerdings mit apt), das hat auch nichts gebracht.
*ratlos*
Der Test funktioniert übrigens ebenfalls nicht
>>> from pysqlite2 import test
>>> test.test()
.........................................................E................EEEFE..............FE......FEF......FFE..................FFFFFFEE...EEEEEE...........EEEEFESegmentation fault
In `~/.ipython/ipythonrc` steht bei mir folgendes:Leonidas hat geschrieben:@BlackJack: Gibt es bei IPython eine Option, die das zusätzliche Newline bei In[1] nicht ausgibt, sondern eher wie der normale Interpreter funktioniert? Ich konnte in der Dokumentation irgendwie nichts finden.
Code: Alles auswählen
# The structure of prompt printing is:
# (SeparateIn)Input....
# (SeparateOut)Output...
# (SeparateOut2), # that is, no newline is printed after Out2
# By choosing these you can organize your output any way you want.
separate_in \n
separate_out 0
separate_out2 0
-
- User
- Beiträge: 21
- Registriert: Sonntag 16. April 2006, 12:48
Ich hätte gedacht, dass der standardmäßig dabei wäre:BlackJack hat geschrieben:Wo hast Du diesen Test her? Bei mir gibt's den nicht! Hast Du auch das Python-Binding selbst gebaut?
http://initd.org/pub/software/pysqlite/ ... ource.html
Steht bei Step 4.
@Leonidas
Der Pfad ist ganz genau der gleiche bei mir, daran liegts wohl auch nicht.
Wenn Du das aus den Quellen installierst, dann gibt es diesen Test, aber im pysqlite2 Paket ist der nicht enthalten. Also wo hast Du ihn her!?_Sebastian_ hat geschrieben:Ich hätte gedacht, dass der standardmäßig dabei wäre:BlackJack hat geschrieben:Wo hast Du diesen Test her? Bei mir gibt's den nicht! Hast Du auch das Python-Binding selbst gebaut?
http://initd.org/pub/software/pysqlite/ ... ource.html
Steht bei Step 4.
Code: Alles auswählen
$ dpkg -L python2.4-pysqlite2
/.
/usr
/usr/lib
/usr/lib/python2.4
/usr/lib/python2.4/site-packages
/usr/lib/python2.4/site-packages/pysqlite2
/usr/lib/python2.4/site-packages/pysqlite2/__init__.py
/usr/lib/python2.4/site-packages/pysqlite2/dbapi2.py
/usr/lib/python2.4/site-packages/pysqlite2/_sqlite.so
/usr/share
/usr/share/doc
/usr/share/doc/python2.4-pysqlite2
/usr/share/doc/python2.4-pysqlite2/usage-guide.html
/usr/share/doc/python2.4-pysqlite2/default.css
/usr/share/doc/python2.4-pysqlite2/docutils.css
/usr/share/doc/python2.4-pysqlite2/silvercity.css
/usr/share/doc/python2.4-pysqlite2/README.Debian
/usr/share/doc/python2.4-pysqlite2/copyright
/usr/share/doc/python2.4-pysqlite2/examples
/usr/share/doc/python2.4-pysqlite2/examples/adapter_datetime.py
/usr/share/doc/python2.4-pysqlite2/examples/adapter_point_1.py
/usr/share/doc/python2.4-pysqlite2/examples/adapter_point_2.py
/usr/share/doc/python2.4-pysqlite2/examples/connect_db_1.py
/usr/share/doc/python2.4-pysqlite2/examples/connect_db_2.py
/usr/share/doc/python2.4-pysqlite2/examples/converter_point.py
/usr/share/doc/python2.4-pysqlite2/examples/countcursors.py
/usr/share/doc/python2.4-pysqlite2/examples/createdb.py
/usr/share/doc/python2.4-pysqlite2/examples/execsql_fetchonerow.py
/usr/share/doc/python2.4-pysqlite2/examples/execsql_printall_1.py
/usr/share/doc/python2.4-pysqlite2/examples/execute_1.py
/usr/share/doc/python2.4-pysqlite2/examples/execute_2.py
/usr/share/doc/python2.4-pysqlite2/examples/execute_3.py
/usr/share/doc/python2.4-pysqlite2/examples/executemany_1.py
/usr/share/doc/python2.4-pysqlite2/examples/executemany_2.py
/usr/share/doc/python2.4-pysqlite2/examples/executescript.py
/usr/share/doc/python2.4-pysqlite2/examples/insert_more_people.py
/usr/share/doc/python2.4-pysqlite2/examples/md5func.py
/usr/share/doc/python2.4-pysqlite2/examples/mysumaggr.py
/usr/share/doc/python2.4-pysqlite2/examples/parse_colnames.py
/usr/share/doc/python2.4-pysqlite2/examples/pysqlite_datetime.py
/usr/share/doc/python2.4-pysqlite2/examples/row_factory.py
/usr/share/doc/python2.4-pysqlite2/examples/simple_tableprinter.py
/usr/share/doc/python2.4-pysqlite2/usage-guide.txt.gz
/usr/share/doc/python2.4-pysqlite2/changelog.Debian.gz
/usr/share/doc-base
/usr/share/doc-base/python2.4-pysqlite2
-
- 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?
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?
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.
Hast Du das eigene `pysqlite2` über ein bereits installiertes Paket gebügelt? Dann reicht es vielleicht schon das Paket nochmal zu installieren.
-
- 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
Der interessante Part der Ausgabe von setup.py ist
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.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 müsste da irgendwo noch eine `_sqlite.so` geben. Vielleicht hast Du davon noch eine "falsche" irgendwo rumliegen!?
-
- 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?
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?