Python pysqlite non accetta la mia parametrizzazione qmark
-
19-08-2019 - |
Domanda
Penso di essere un osso, forse non sto importando il pacchetto giusto, ma quando lo faccio ...
from pysqlite2 import dbapi2 as sqlite
import types
import re
import sys
...
def create_asgn(self):
stmt = "CREATE TABLE ? (login CHAR(8) PRIMARY KEY NOT NULL, grade INTEGER NOT NULL)"
stmt2 = "insert into asgn values ('?', ?)"
self.cursor.execute(stmt, (sys.argv[2],))
self.cursor.execute(stmt2, [sys.argv[2], sys.argv[3]])
...
I get the error pysqlite2.dbapi2.OperationalError: near "?": syntax error
Questo ha molto poco senso per me, poiché i documenti mostrano che pysqlite è parametrizzato con qmark. Sono nuovo di Python e db-api, aiutatemi! GRAZIE
Soluzione
Questo perché i parametri possono essere passati solo a VALUES. Il nome della tabella non può essere parametrizzato.
Inoltre, nella seconda query sono presenti virgolette attorno a un argomento parametrizzato. Rimuovi le virgolette, l'escaping viene gestito automaticamente dalla libreria sottolineata per te.
Altri suggerimenti
Prova a rimuovere le virgolette nella riga che assegna a stmt2
:
stmt2 = "insert into asgn values (?, ?)"
Inoltre, come dice nosklo, non è possibile utilizzare la parametrizzazione del punto interrogativo con le istruzioni CREATE TABLE. Inserisci direttamente il nome della tabella nell'SQL.
Se vuoi davvero farlo, prova qualcosa del genere:
def read (db = " progetti "):
sql = "select * from %s"
sql = sql % db
c.execute(sql)