2016-08-23 1 views
0

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:

enter image description here

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:

enter image description here

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.

Antwort

1

Python hat eine eigene Kopie der SQLite-Bibliothek (siehe sqlite3.sqlite_version).

Wenn die neueste Python-Version nicht über eine ausreichend aktuelle Version von SQLite verfügt, besteht die einzige Möglichkeit zur Aktualisierung darin, Python neu zu kompilieren oder einen anderen DB-Treiber wie APSW zu verwenden.

+0

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? –

+0

Siehe den ersten Satz meiner Antwort. –