在我的代码中,我将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