Por ejemplo, cuando uso el cursor.execute()
como se documenta :
>>> from django.db import connection >>> cur = connection.cursor() >>> cur.execute("DROP TABLE %s", ["my_table"]) django.db.utils.DatabaseError: near "?": syntax error
Cuando no se utiliza la sustitución de argumentos de Django, la consulta funciona como se esperaba:
>>> cur.execute("DROP TABLE my_table") django.db.utils.DatabaseError: no such table: my_table
¿Qué estoy haciendo mal? ¿Cómo puedo hacer que funcionen las consultas parametrizadas?
Notas:
;
no ayuda %s
, no SQLite ?
(Django traduce %s
?
) No puede usar parámetros en sentencias de SQL en lugar de identificadores (nombres de columnas o tablas). Solo puedes usarlos en lugar de valores únicos.
En su lugar, debe usar SQL dynamic para construir la cadena SQL completa y enviarla, sin parametrizar, a la base de datos (tenga mucho cuidado de evitar la inyección si el nombre de la tabla se origina fuera de su código).
No puede sustituir metadatos en consultas parametrizadas.