verwende ich eine Datenbank erstellt haben und bin in der Lage, eine einfache Ansicht mit dem folgenden Befehl aus:Kann nicht Spaltennamensliste erstellen SQLite View in Python
CREATE VIEW IF NOT EXISTS monthly_terminals (year, month) AS
SELECT reportYear, reportMonth FROM osMonthlyTerminals
Dieser Befehl funktioniert nur gut, wenn ich einfügen in die SQLite-Manager-Plugin auf FireFox:
mir diese Ansicht dann fallen lassen und versuchen, den exakt gleichen Befehl im folgenden Python 3-Code zu verwenden, um diese Ansicht zu erstellen ...
import sqlite3
db_name = "../data/OsReportMerchants.sqlite"
conn = sqlite3.connect(db_name)
cur = conn.cursor()
cur.execute("CREATE VIEW IF NOT EXISTS monthly_terminals (year, month) AS SELECT reportYear, reportMonth FROM osMonthlyTerminals")
... aber ich bekomme die folgende Fehlermeldung:
sqlite3.OperationalError: near "(": syntax error
Genauer gesagt, es sieht aus wie diese in ipython:
Ja, ich weiß, ich sollte dies sein Parametrisierung und ich habe versucht, es zu tun, aber laufe immer wieder in denselben Fehler.
Ich sehe dies an: https://www.sqlite.org/lang_createview.html und es heißt, dass Spaltenlisten in 3.9 und später unterstützt werden, so dass ich auf Version 3.13 von sqlite3 aktualisiert und immer noch in dieses Problem lief.
Wenn ich entfernen Sie die Spaltenliste und verwenden Sie diese:
import sqlite3
db_name = "../data/OsReportMerchants.sqlite"
conn = sqlite3.connect(db_name)
cur = conn.cursor()
cur.execute("CREATE VIEW IF NOT EXISTS monthly_terminals AS SELECT reportYear, reportMonth FROM osMonthlyTerminals")
es gut funktioniert. Nicht sicher, warum es in dem einen Kontext und nicht in dem anderen Kontext funktioniert.
Wenn ich eine Conda-Liste mache, wird SQLite 3.13.0 angezeigt. Wenn ich sqlite3.version (nach dem Import von sqlite3) aus der Python-Shell mache, heißt es 2.6.0. Das erscheint mir verwirrend (vielleicht weil ich Python relativ neu bin). Es sieht also so aus, als ob das FireFox-Plugin eine neuere Version verwendet und mein Python-Code die ältere Version verwendet. Geht das so? –
Siehe den ersten Satz meiner Antwort. –