Seite 1 von 1
sqlite3.connect(…) mit Platzhalterübergabe
Verfasst: Mittwoch 24. Juni 2015, 21:52
von DMD
manchmal liegts auch an kleinigkeiten:
db = sqlite3.connect('C:\Users\DMD-OL\Desktop\\datum=?\\adressenliste.db', (datum))
weiß jemand, wie die korrekte syntax ist?
Re: sqlite3.connet( ... ) mit Platzhalterübergabe
Verfasst: Mittwoch 24. Juni 2015, 22:01
von BlackJack
@DMD: Das hat weder mit der `connect()`-Funktion noch mit `sqlite` etwas zu tun. Du musst halt einfach wie bei anderen Zeichenketten auch einen Wert dort hineinformatieren, zum Beispiel mit der `format()`-Methode auf Zeichenketten.
Re: sqlite3.connet( ... ) mit Platzhalterübergabe
Verfasst: Sonntag 5. Juli 2015, 14:44
von bb1898
DMD hat geschrieben:manchmal liegts auch an kleinigkeiten:
db = sqlite3.connect('C:\Users\DMD-OL\Desktop\\datum=?\\adressenliste.db', (datum))
weiß jemand, wie die korrekte syntax ist?
Dies ist keine Abfrage, bei der Du Abfragetext und Parameter trennen kannst und sollst. Die connect-Methode von sqlite3 erwartet den Namen der Datenbankdatei als String. Also hier ganz normal mit Stringformatierung arbeiten:
db = sqlite3.connect(r'C:\Users\DMD-OL\Desktop\datum={0}\adressenliste.db'.format(datum))
Und wenn "datum" tatsächlich ein Datum ist, dann natürlich mit dem Datumsformat aufpassen. Und noch was: in Deinem Beitrag hast Du mal einfache, mal doppelte Backslashes stehen, das ist so natürlich falsch. Ich habe einen "raw string" daraus gemacht und die Doppel-Backslashes entfernt, das sollte stimmen. Aber vielleicht waren das ja auch nur Tippfehler im Beitrag.
Re: sqlite3.connet( ... ) mit Platzhalterübergabe
Verfasst: Donnerstag 9. Juli 2015, 02:53
von DMD
das hier funktioniert:
import time
import sqlite3
datum = time.strftime("%d.%m.%Y")
SQL_str='C:\Users\DMD-OL\Desktop\Verwaltung Arbeitszeit\\%s\\adressenliste.db' % (datum)
conn = sqlite3.connect(SQL_str)
....
sorry, hätte besser alles posten sollen!
Re: sqlite3.connet( ... ) mit Platzhalterübergabe
Verfasst: Donnerstag 9. Juli 2015, 07:27
von /me
DMD hat geschrieben:das hier funktioniert:
[...]
Das sieht aber nicht wirklich gut aus, da du die Backslashes nicht konsequent einsetzt. Entweder verdoppelst du alle Backslashes wie in
'C:\\Users\\DMD-OL\\Desktop\\Verwaltung Arbeitszeit\\%s\\adressenliste.db' oder du setzt gleich einen Raw-String ein:
r'C:\Users\DMD-OL\Desktop\Verwaltung Arbeitszeit\%s\adressenliste.db'
Code: Alles auswählen
>>> 'C:\Users\DMD-OL\Desktop\Verwaltung Arbeitszeit\\%s\\adressenliste.db'
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Zudem ist deine Namensvergabe unglücklich. Erstens enthält
SQL_str die Angabe des Datentyps (string) was eigentlich nur noch von Leuten gemacht wird, die die ungarische Notation nicht verstanden haben. Zweitens ist der Inhalt von
SQL_str überhaupt kein SQL und der Name führt somit nur zu falschen Annahmen.
Ergänzend: Rein logisch ist mir unklar, warum für jeden Tag eine eigene Datenbank angelegt wird, statt das Tagesdatum in den entsprechenden Tabellen als Spalte mitzuführen.
Re: sqlite3.connet( ... ) mit Platzhalterübergabe
Verfasst: Donnerstag 9. Juli 2015, 14:37
von DMD
das mit der syntax hab ich übersehn.
ich bin erst vor 3 monaten angefangen und noch so "jo, geil... FUNKTIONIERT..."-drauf.
ich arbeite jeden tag ein bisschen daran, profi zu werden.
deswegen bin ich ganz dankbar für deine kritik!