Как проверить, существует ли таблица с переменной - PullRequest
0 голосов
/ 26 марта 2020

У меня есть база данных sqlite, с помощью которой я могу успешно проверить, существует ли таблица.

conn = sqlite3.connect('test.db)
c = conn.cursor()

c.execute('''SELECT count(name) FROM sqlite_master WHERE type='table' AND name = 'March' '''

Однако, как только я ввожу переменную в этот код:

c.execute('''SELECT count(name) FROM sqlite_master WHERE type='table' AND name={} '''.format('March')

Я получаю следующую ошибку:

c.execute('''SELECT count(name) FROM sqlite_master WHERE type='table' AND name={}'''.format('March'))
sqlite3.OperationalError: no such column: March

Есть ли лучший способ делать это или я что-то упустил?

1 Ответ

1 голос
/ 26 марта 2020

Вам все еще нужно заключить имя столбца в кавычки, поскольку вы динамически строите запрос.

c.execute(
    '''SELECT count(name)
       FROM sqlite_master
       WHERE type='table' AND name='{}'
    '''.format('March')
)

Тем не менее, намного более безопасный способ написать такой запрос - разрешить c.execute сама вставляет значение, а не использует интерполяцию строк (которая не гарантирует правильного экранирования значения).

c.execute(
    '''SELECT count(name)
       FROM sqlite_master
       WHERE type='table' AND name=?
    ''',
    ("March",)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...