Ich bin neu in Cursor und ich versuche, durch den Aufbau einer dynamischen Python SQL-Anweisung INSERT mit einem hygienisiert Methode für sqlite3 zu üben:Wie übergibt man Spaltennamen sauber in den Cursor, Python/SQLite?
import sqlite3
conn = sqlite3.connect("db.sqlite")
cursor = conn.cursor()
list = ['column1', 'column2', 'column3', 'value1', 'value2', 'value3']
cursor.execute("""insert into table_name (?,?,?)
values (?,?,?)""", list)
Wenn ich dies zu nutzen versuchen, bekomme ich einen Syntaxfehler " sqlite3.OperationalError: nahe "?" "auf der Linie mit den Werten. Dies ist trotz der Tatsache, dass, wenn ich die Spalten hart Code (und entfernen Sie die Spaltennamen aus der Liste), habe ich kein Problem. Ich könnte mit% s konstruieren, aber ich weiß, dass die sanierte Methode bevorzugt wird.
Wie lege ich diese sauber ein? Oder fehlt mir etwas Offensichtliches?
Ich schätze die Einsicht - ich kann verstehen, dass ich die Feldnamen nicht bereinigen muss (ich plane, sie dynamisch durch eine andere interne Klassenmethode in derselben Klasse zu erzeugen), ich habe einfach versucht, die beiden Feldnamen einzufügen und die Werte. Ich denke jetzt (nachdem ich Ihre Antwort gelesen habe), die Methode% s zu verwenden, um die anfängliche Zeichenfolge zu generieren, die die Zeichenfolge? Und dann füge einfach die ganze Saite ein ... Ich melde mich bei dir, ob das funktioniert hat. – whybull
In der Tat. Wenn ich für mich selbst code, bin ich eher faul und mache so etwas: '" SELECT * FROM hashtable WHERE% s = ?; "' – krysopath