Seite 1 von 1
Dateinamen mit . (Punkt) in SQLite DB schreiben
Verfasst: Donnerstag 17. September 2020, 14:05
von 16_Bit
Hallo,
ich habe eine simple SQLite Tabelle.
Code: Alles auswählen
sql = 'CREATE TABLE IF NOT EXISTS {} \
(dateinummer INTEGER PRIMARY KEY NOT NULL, \
dateiname TEXT, \
erfassungszeit DATE)'.format(tabellenname)
Beim INSERT habe ich leider Dateinamen die einen . (Punkt) enthalten.
Code: Alles auswählen
INSERT INTO mytable VALUES (45841, 000014121011.104027544.EMDK0755)
Bei der Ausführung bekomme ich daher eine Fehlermeldung.
Code: Alles auswählen
sql = 'INSERT INTO {} VALUES ({}, {})'.format(tabellenname, int(ergebnis[1]), os.path.basename(datei))
Könnt ihr mir verraten wie ich die Dateinamen ohne Fehlermeldung schreiben kann?
Re: Dateinamen mit . (Punkt) in SQLite DB schreiben
Verfasst: Donnerstag 17. September 2020, 14:19
von Jankie
#edit: Falschinformation, danke an Sirius3 fürs korrigieren.
Wenn du einen String in die DB schreiben willst, musst du den Wert auch als einen String kennzeichnen.
Re: Dateinamen mit . (Punkt) in SQLite DB schreiben
Verfasst: Donnerstag 17. September 2020, 14:20
von Sirius3
@16_Bit: Tabellennamen sind was fixes, die sollte man nicht mit format in den SQL.Ausdruck hineinformatieren.
Variablen sind immer variable, und dürfen niemals per format in SQL-Ausdrücke hineinformatiert werden. Dafür gibt es Platzhalter.
Code: Alles auswählen
cursor.execute("INSERT INTO mytable (dateinummer, dateiname) VALUES (?, ?)", [ergebnis[1], os.path.basename(datei)])
mytable ist ein besonders schlechter Name für eine Tabelle.
@Jankie: nein muß man nicht, weil der Typ der Platzhalter automatisch korrekt verarbeitet wird.
Re: Dateinamen mit . (Punkt) in SQLite DB schreiben
Verfasst: Donnerstag 17. September 2020, 14:29
von __blackjack__
Noch eine Anmerkung: NOT NULL ist in PRIMARY KEY bereits enthalten.
Re: Dateinamen mit . (Punkt) in SQLite DB schreiben
Verfasst: Freitag 18. September 2020, 08:34
von 16_Bit
Danke schon mal für die Unterstützung.
Die Tabelle heißt nicht mytable, dass hatte ich nur hier im Forum als Platzhalter gewählt.
Den Tabellennamen formatiere ich mit {} rein, da ich im Prinzip 5 Identische Tabellen erzeuge, jedoch für verschiedene Mandanten. Ich wollte jetzt nicht für alle Tabellen eigenen Code schreiben, da diese zu 98% identisch sind.
Code: Alles auswählen
sql = 'CREATE TABLE IF NOT EXISTS {} \
(dateinummer INTEGER PRIMARY KEY NOT NULL, \
dateiname TEXT, \
erfassungszeit DATE)'.format(tabellenname)
Wie hättet ihr das denn gelöst? 5 mal create table mit dem jeweiligen Tabellennamen?
Re: Dateinamen mit . (Punkt) in SQLite DB schreiben
Verfasst: Freitag 18. September 2020, 09:01
von Sirius3
@16_Bit: man erzeugt gar nicht 5 Tabellen, sondern kodiert die zusätzliche Information "Mandant" als Spalte in einer Tabelle.