在Sqlite3中,SELECT语句不会返回所有可能的行

时间:2018-12-22 15:41:44

标签: python sqlite pyqt pyqt5

在我的代码中,我将pyqt5sqlite3结合使用来创建一个应用程序来查询数据库中的行。我创建了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

0 个答案:

没有答案