murph hat geschrieben:bekomme ich den gehler, dass die tabelle leer sei. sie ist auch 0 byte groß. aber wieso?
Hi murph!
SQLite ist so eingestellt, dass es NICHT automatisch einen
Commit durchführt. Warum? Weil es dadurch schneller und sicherer ist.
Irgendwo habe ich diese, sinngemäß (aus dem Gedächtnis) übersetzte, Aussage gelesen:
"Wenn du möchtest, dass SQLite langsam ist, dann schalte
AutoCommit ein."
Die Lösung:
Nachdem du Daten per SQL-Anweisung in die Datenbank geschrieben hast, musst du ein
nachschieben.
Außerdem, würde ich mir das neueste pySQLite besorgen:
http://initd.org/tracker/pysqlite#Downloads
Code: Alles auswählen
import os
try:
import sqlite3 # Ab Python 2.5
except:
from pysqlite2 import dbapi2 as sqlite3
#
# Schreiben
#
# Nur zum Testen: Alte Datei vorher loeschen
try:
os.remove("dateiname.sqlite")
except:
pass
# Verbindung herstellen
conn = sqlite3.connect("dateiname.sqlite")
cur = conn.cursor()
# Tabelle erstellen
sql = """
CREATE TABLE adressen (
first_name varchar,
last_name varchar,
age int
)
"""
cur.execute(sql)
conn.commit()
# Werte in die Tabelle schreiben
personen = [
{"first_name": "Gerold", "last_name": "Penz", "age": "31"},
{"first_name": "Ludwig", "last_name": "Bucher", "age": "29"},
]
sql = """
INSERT INTO adressen (
first_name,
last_name,
age
)
VALUES (
:first_name,
:last_name,
:age
)
"""
cur.executemany(sql, personen)
conn.commit()
# Verbindung schliessen
cur.close()
conn.close()
#
# Lesen
#
# Verbindung herstellen
conn = sqlite3.connect("dateiname.sqlite")
cur = conn.cursor()
sql = """
SELECT
first_name, last_name, age
FROM
adressen
"""
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
vorname, nachname, alter = row
print "Datensatz:", row
print "Vorname: ", vorname, "==>", type(vorname)
print "Nachname: ", nachname, "==>", type(nachname)
print "Alter: ", alter, "==>", type(alter)
print
# Verbindung schliessen
cur.close()
conn.close()
Wenn du wissen willst, wie das mit dem AutoCommit funktioniert, dann schau mal hier rein:
http://www.python-forum.de/topic-6157.html
Außerdem gibt es bereits eine recht gute Hilfe zum neuen SQLite:
http://docs.python.org/dev/lib/module-sqlite3.html
mfg
Gerold