sqlite3.OperationalError: near "?": синтаксическая ошибка при циклическом просмотре прагмы table_info - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу проверить, что таблицы и представления базы данных, введенные пользователем, правильно настроены, прежде чем я начну выполнять над ним операции CRUD.

Я могу заставить это работать, если я жестко закодирую каждое из имен таблиц, но я хочу динамически собирать информацию обо всех таблицах и представлениях, чтобы быть более эффективными и знать, есть ли больше, чем я ожидаю.

import sqlite3
conn = sqlite3.connect("test.db")
tables = c.execute("""SELECT name 
                          FROM sqlite_master 
                          WHERE type='view' 
                          OR type='table' 
                          ORDER BY name;""").fetchall()
for t in tables:
    c.execute("pragma table_info(?)",t).fetchall()

Вывод "таблиц" выглядит так:

[('table1',), ('table2',), ('v_view1',)]

Когда я запускаю код выше, он возвращает ошибку ниже.

sqlite3.OperationalError: near "?": syntax error

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Попробуйте это:

for t in tables:
   c.execute("pragma table_info({})".format(t)).fetchall()
0 голосов
/ 12 ноября 2018

Вы можете использовать ? переменные только для значений, но не для идентификаторов, таких как имена таблиц.

Используйте форматирование строки для создания строки SQL с именем таблицы в ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...