@NasherDenn
Инженер NDT PAUT

Перебор таблиц в sqlite3 PyQt5 setQuery на python?

Есть база данных sqlite3 с большим количеством таблиц, в каждой таблице разное количество столбцов и записей. Уникального id нет. Нужно обойти все таблицы и вывести определённое значение. Запрос через PyQT5 setQuery что бы можно было вывести найденные значения в форму.
Но загвоздка! Запрос в конкретную таблицу '_1_04_YKR_ON_UT_20_069' работает:

line_for_search = '1-3301-GA-006-1-A17-HC'
con = QSqlDatabase.addDatabase('QSQLITE')
con.setDatabaseName(r'C:\Users\asus\PycharmProjects\YKR\YKR\reports_db.sqlite')
for i in con.tables():
sqm.setQuery('SELECT * FROM _1_04_YKR_ON_UT_20_069 WHERE Line="{}"'.format(line_for_search),
db=QSqlDatabase('reports_db.sqlite'))

Если же заменить номер таблицы на переменную i:

sqm.setQuery('SELECT * FROM {} WHERE Line="{}"'.format(i, line_for_search),
db=QSqlDatabase('reports_db.sqlite'))

то не работает.
Почему так? Любые формы форматирования (?, f-строка, format, &s) не помогают.
  • Вопрос задан
  • 388 просмотров
Пригласить эксперта
Ответы на вопрос 2
LaRN
@LaRN
Senior Developer
Список названий таблиц можно получить так:
import sqlite3

con = sqlite3.connect(r'C:\Users\asus\PycharmProjects\YKR\YKR\reports_db.sqlite')
cur = con.cursor()

line_for_search = '1'
for tablename in cur.execute("select name from sqlite_master where type = 'table'"):
    print('SELECT * FROM {} WHERE Line="{}"'.format(tablename[0], line_for_search))
Ответ написан
@NasherDenn Автор вопроса
Инженер NDT PAUT
Нашёл ошибку. Перебор таблиц через цикл for работает. При переборе всех таблиц в форме отображались данные из последней. Т.е. в моём случае с данными по умолчанию - пусто. Надо изменить логику алгоритма.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы