Ich hab´mal wieder ein Prob. Diesmal mit Umlauten u. pysqlite. Die zahlreichen Infos zum Thema hier im Forum haben mich auch nicht weitergebracht, weil ich keine Strings sondern Variablen-Inhalte an SQLite weitergebe.
Ich habe die Variablen denen ich die Entry-Inhalte übergebe, wie folgt encodiert:
Code: Alles auswählen
vsnr = self.eSerial.get().encode("cp1252")
vorname = self.entriesVo.get().encode("cp1252")
zuname = self.entriesZu.get().encode("cp1252")
straße = self.entriesSt.get().encode("cp1252")
hausnr = self.entriesHNr.get().encode("cp1252")
plz = self.entriesPLZ.get().encode("cp1252")
ort = self.entriesOr.get().encode("cp1252")
beruf = self.entriesBe.get().encode("cp1252")
branche = self.entriesBr.get().encode("cp1252")
gebdat = self.entriesGe.get().encode("cp1252")
staatsan = self.entriesSta.get().encode("cp1252")
Es erscheint jedoch folgendes Traceback:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\Dokumente und Einstellungen\Desktop\Antrag.pyw", line 234, in saveexcel
cur.execute(sql)
OperationalError: Could not decode to UTF-8 column 'straße' with text 'äöü'
richtig in die Datenbank übernommen.
Hier noch der restliche SQLite-Teil:
Code: Alles auswählen
#
# Schreiben
#
# Nur zum Testen: Alte Datei vorher loeschen
try:
os.remove("Antragsdaten.s3db")
except:
pass
# Verbindung herstellen
conn = sqlite3.connect(
"Antragsdaten.s3db",
isolation_level = None, # Autocommit
)
cur = conn.cursor()
# Tabelle erstellen
sql = """
CREATE TABLE adressen (
vsnr varchar,
vorname varchar,
zuname varchar,
straße varchar,
hausnr varchar,
plz varchar,
ort varchar,
beruf varchar,
branche varchar,
gebdat varchar,
staatsan varchar
)
"""
cur.execute(sql)
# Werte in die Tabelle schreiben
personen = [
{"vsnr": vsnr, "vorname": vorname, "zuname": zuname,
"straße": straße, "hausnr": hausnr, "plz": plz, "ort": ort,
"beruf": beruf, "branche": branche, "gebdat": gebdat,
"staatsan": staatsan},
]
sql = """
INSERT INTO adressen (
vsnr,
vorname,
zuname,
straße,
hausnr,
plz,
ort,
beruf,
branche,
gebdat,
staatsan
)
VALUES (
:vsnr,
:vorname,
:zuname,
:straße,
:hausnr,
:plz,
:ort,
:beruf,
:branche,
:gebdat,
:staatsan
)
"""
cur.executemany(sql, personen)
# Verbindung schliessen
cur.close()
conn.close()
#
# Lesen
#
# Verbindung herstellen
conn = sqlite3.connect("Antragsdaten.s3db")
cur = conn.cursor()
sql = """
SELECT
vsnr, vorname, zuname, straße, hausnr, plz, ort, beruf, branche,
gebdat, staatsan
FROM
adressen
"""
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
vsnr, vorname, zuname, straße, hausnr, plz, ort, beruf, branche, gebdat, staatsan = row
# Verbindung schliessen
cur.close()
conn.close()
auch schon dankbar.
Gruß andy