Как экранировать имя таблицы SQLite3 в python?
Обычно экранирование чего бы то ни было я делал следующим образом.
q = "UPDATE table SET var1 = ? WHERE var2 = ?"
db_form = ['foo', 'bar']
c.execute(q, db_form)
Но мне потребовалось экранировать имя таблицы.
db_form = ['table_name']
q = "DROP TABLE IF EXIST ?"
c.execute(q, db_form)
И я получаю такую ошибку: sqlite3.OperationalError: near "?": syntax error
Ответы (1 шт):
Автор решения: Andrew Hobbit
→ Ссылка
Плейсхолдеры можно использовать только для значений, но не для идентификаторов (таких как имена таблиц, столбцов и т.д.) Для sqlite можно использовать quote()
import sqlite3
table_name = 'table_name'
c.execute(f'DROP TABLE IF EXISTS {sqlite3.quote(table_name)}')