sqlite3.connect(…) mit Platzhalterübergabe

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

manchmal liegts auch an kleinigkeiten:

db = sqlite3.connect('C:\Users\DMD-OL\Desktop\\datum=?\\adressenliste.db', (datum))

weiß jemand, wie die korrekte syntax ist?
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.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

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.
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

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!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

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!
Antworten