Cómo usar la variable para el nombre de la tabla SQLite

Tengo un progtwig donde el usuario puede seleccionar qué tabla desea modificar en SQLite. Almaceno la selección en una variable llamada table , luego bash y selecciono todo de esa tabla

 c.execute('SELECT * FROM ?', (table,)) 

El progtwig se atasca en el signo de interrogación. Dice:

“Sqlite3.EperationalError: near”? “: Error de syntax”

¿Qué estoy haciendo mal?

No puede utilizar la sustitución de parámetros para el nombre de la tabla . Debe agregar el nombre de la tabla a la cadena de consulta. Algo como esto:

 query = 'SELECT * FROM {}'.format(table) c.execute(query) 

Una cosa a tener en cuenta es la fuente del valor para el nombre de la tabla. Si eso proviene de una fuente no confiable, por ejemplo, un usuario, debe validar el nombre de la tabla para evitar posibles ataques de inyección de SQL. Una forma podría ser construir una consulta parametrizada que busque el nombre de la tabla en el catálogo de la base de datos:

 import sqlite3 def exists_table(db, name): query = "SELECT 1 FROM sqlite_master WHERE type='table' and name = ?" return db.execute(query, (name,)).fetchone() is not None