Python pysqlite no acepta mi parametrización qmark
-
19-08-2019 - |
Pregunta
Creo que estoy siendo un tonto, tal vez no estoy importando el paquete correcto, pero cuando lo hago ...
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
Esto tiene muy poco sentido para mí, ya que los documentos muestran que pysqlite es qmark parametrizado. Sin embargo, soy nuevo en python y db-api, ¡ayúdame! GRACIAS
Solución
Esto se debe a que los parámetros solo se pueden pasar a VALUES. El nombre de la tabla no se puede parametrizar.
También tiene citas alrededor de un argumento parametrizado en la segunda consulta. Elimine las comillas, la biblioteca de subrayado se encarga de escapar automáticamente.
Otros consejos
Intente eliminar las comillas en la línea que se asigna a stmt2
:
stmt2 = "insert into asgn values (?, ?)"
Además, como dice nosklo, no se puede usar la parametrización de signos de interrogación con las declaraciones CREATE TABLE. Pegue el nombre de la tabla en el SQL directamente.
Si realmente quieres hacerlo, prueba algo como esto:
def read (db = " proyectos "):
sql = "select * from %s"
sql = sql % db
c.execute(sql)