Как экранировать имя таблицы SQLite3 в python?

Рейтинг: 1Ответов: 1Опубликовано: 27.07.2025

Обычно экранирование чего бы то ни было я делал следующим образом.

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

Плейсхолдеры можно использовать только для значений, но не для идентификаторов (таких как имена таблиц, столбцов и т.д.) Для sqlite можно использовать quote()

import sqlite3

table_name = 'table_name'
c.execute(f'DROP TABLE IF EXISTS {sqlite3.quote(table_name)}')