В моем коде я использую pyqt5
с sqlite3
для создания приложения, которое запрашивает строки из базы данных.Я создал def search(self)
метод, который должен возвращать записи, дающие national_id
в качестве входных данных, используя оператор SELECT
(показано ниже).Проблема в том, что у меня может быть несколько строк с одинаковым national_id
, но код возвращает только первую (даже если я использую commit()
).Как я могу вернуть ВСЕ возможные строки, которые удовлетворяют запросу?
PS Я использую QTableWidget
, чтобы показать результаты (вы можете сделать вывод, что код GUI сгенерирован из Qt Designer, но я добавляю свои собственные методы по мере необходимости)
Это Tracking
таблица:
CREATE TABLE `Tracking` (
`national_id` INTEGER,
`membership_id` INTEGER,
`visitor_name` TEXT,
`visiting_time` TEXT,
`phone` TEXT,
`num_visitors` INTEGER,
`visiting_type` TEXT,
`status` TEXT,
`notes` TEXT
);
Метод поиска следующий:
def search(self):
id = self.get_nationalID()
db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'resort.db'))
cur = db.cursor()
result = cur.execute('SELECT * FROM Tracking WHERE national_id=?', (id,))
db.commit()
if id == -1:
pass
else:
self.tableWidget.setRowCount(0)
for row_index, row_data in enumerate(result.fetchall()):
self.tableWidget.insertRow(row_index)
for col_index, col_data in enumerate(row_data):
self.tableWidget.setItem(row_index, col_index, QTableWidgetItem(str(col_data)))
self.resize_table_view()
def get_nationalID(self):
i, okPressed = QInputDialog.getInt(self, "Input", "ًEnter ID")
if okPressed:
return i
else:
return -1