La ejecución de SQL sin procesar contra SQLite con resultados de Django en `DatabaseError: cerca de“? ”: Error de syntax`

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:

  • Sufilando la consulta con ; no ayuda
  • Según la documentación, se debe usar %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.