从列表条目访问SQL数据

时间:2020-02-15 00:23:23

标签: python qt pyqt pyqt5

首先,我将描述并展示我的迷你程序如何在视觉上工作,这样我的问题就很容易理解

程序说明

以下是我用于该程序的2个寡妇:

主窗口

输入窗口

程序启动时显示主窗口。我将QListWidget用于“宏”列表,该列表显示了从Sqlite数据库(DB)读取的每个条目的标题。当按下主窗口中的“新建”按钮时,将显示一个新的输入窗口。输入窗口中的“保存”按钮将标题和描述输入保存到数据库,并在主窗口中更新“宏”列表。看起来像这样:

在输入窗口中输入信息

更新的主窗口

我的Sqlite表

我的问题

我希望能够在“宏”(Macros)列表中选择一个条目,按“编辑”(Edit)按钮,并显示充满来自DB数据的输入窗口。但是,由于QListWidget仅允许输入字符串,因此我无法使用它的PK(“ id”)进行搜索。

我正在考虑使用QTableWidget而不是QListWidget。我将加载整个表格,但隐藏除了标题列之外的所有列,以便仅标题将显示在主窗口的“宏”列表中。对于查询,我将通过访问所选条目的第0个索引来使用条目的PK。

请告诉我这是否正确。如果不是,请描述您将用来实现仅显示标题但允许查询其数据的列表的方式。我是PyQt / PySide的初学者,非常感谢您提供任何指导。

代码

下面是按下“保存”按钮(及其辅助功能)时执行的代码

def save_macro(self):

    title = self.lineedit.text()
    description = self.textedit.toPlainText()

    add_sql_query = ''' INSERT INTO Macros (title,description)
                  VALUES(?,?) '''

    # Helper func that creates connection to db
    sqlhelper = SqliteHelper("entry name")

    if sqlhelper is not None:  # If db is connected:
        macro_data = (title, description)
        sqlhelper.insert(add_sql_query, macro_data)  

    self.close()


class SqliteHelper:

    def __init__(self, name=None):
        self.conn = None
        self.cursor = None

        if name:
            self._create_connection(name)

    def _create_connection(self, name):
        try:
            self.conn = sqlite3.connect(name)
            self.cursor = self.conn.cursor()
            print(sqlite3.version)
        except sqlite3.Error as e:
            print(e)

    def insert(self, query, inserts):  # Insert
        c = self.cursor
        c.execute(query, inserts)
        self.conn.commit()

1 个答案:

答案 0 :(得分:1)

不要重新发明轮子,Qt提供了与数据库交互的类,例如,可以使用QSqlQueryModel,QSqlTableModel等处理表上的信息。要添加一行,您必须创建QSqlRecord并将其添加到模型中,对于该版本,可以使用QDataWidgetMapper来映射和编辑行的信息,要删除该行,必须删除该行并重新加载整个表。要指示应在QListView中显示哪个字段,请使用setModelColumn()方法,该方法应该是“标题”字段的列。

git rm {file1} {file2} ... {fileN}
相关问题