Verwenden von Parametern in einer CREATE TABLE … (Spalte DEFAULT ?)-Klausel in Python sqlite3 db-api
-
23-12-2019 - |
Frage
Ich möchte Python verwenden, um eine CREATE STATEMENT-Klausel auszuführen und Standardwerte für bestimmte Spalten mithilfe der Parameterersetzung durch ? anzugeben.(damit ich sicher Standardeinstellungen von Python-Typen angeben kann).
Es scheint nicht zu funktionieren, obwohl es gut funktioniert, wenn ich parametrische Anweisungen in einer SELECT-Anweisung oder einer ähnlichen Anweisung verwende.Zum Beispiel:
Wie erwartet:
>>> list(sqlite3.connect('sensemap.sql3').cursor().execute('select ?', (101,)))
[(101,)]
Unerwartet:
>>> sqlite3.connect('sensemap.sql3').cursor().execute('create table mytable (mycolumn default ?)', (101,))
Traceback (most recent call last):
File "<console>", line 1, in <module>
OperationalError: near "?": syntax error
Warum das?Ist das, was ich versuche, möglich?
Lösung
Die ursprünglichen SQL-Anweisungen aller Ihrer Schemaobjekte werden in der Datenbank gespeichert (versuchen Sie es SELECT sql FROM sqlite_master
).Bei einem so einfachen Textwert ist es nicht möglich, sich Parameterwerte zu merken, daher sind Parameter nicht zulässig CREATE xxx
Aussagen.