微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中:一次将 QtableWidget 中的所有条目插入到数据库表中

如何解决在 Python 中:一次将 QtableWidget 中的所有条目插入到数据库表中

想知道是否有人知道如何使用 python 将 qtablewidget 的所有条目插入到数据库中。到目前为止,我找到了这个编码:

# Creating a query for later execution using .prepare()
insertDataQuery = QsqlQuery()
insertDataQuery.prepare(
    """
    INSERT INTO contacts (
        name,job,email
    )
    VALUES (?,?,?)
    """
)

# Sample data
data = [
    ("Joe","Senior Web Developer","joe@example.com"),("Lara","Project Manager","lara@example.com"),("David","Data Analyst","david@example.com"),("Jane","Senior Python Developer","jane@example.com"),]

# Use .addBindValue() to insert data
for name,email in data:
    insertDataQuery.addBindValue(name)
    insertDataQuery.addBindValue(job)
    insertDataQuery.addBindValue(email)
    insertDataQuery.exec()

我被困在将 qtablewidget 的条目分配给数据

解决方法

您可以使用以下方法:

# Ignore lazy imports
import sys
from typing import *

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *

首先,让我们创建一个函数,用您提供的数据返回 QTableWidget

QTableWidget

def createTable() -> QTableWidget:
    """Let's create a QTableWidget with the data you provided."""

    data = [
        ("Joe","Senior Web Developer","joe@example.com"),("Lara","Project Manager","lara@example.com"),("David","Data Analyst","david@example.com"),("Jane","Senior Python Developer","jane@example.com"),]

    table = QTableWidget()

    table.setRowCount(len(data))
    table.setColumnCount(len(data[0]))

    for i,row in enumerate(data):
        for j,val in enumerate(row):
            table.setItem(i,j,QTableWidgetItem(val))

    return table

现在我们创建一个函数来从表中获取数据并以完全相同的格式返回:

def getData(table: QTableWidget) -> List[Tuple[str]]:
    """Fetch the data from the QTableWidget and return it as `data`."""

    data = []
    for row in range(table.rowCount()):
        rowData = []
        for col in range(table.columnCount()):
            rowData.append(table.item(row,col).data(Qt.EditRole))
        data.append(tuple(rowData))

    return data

对于数据库插入部分,我们可以重用你提供的代码:

def insertData(data: List[Tuple[str]]) -> None:
    """Creating a query for later execution using .prepare()"""

    insertDataQuery = QSqlQuery()
    insertDataQuery.prepare(
        """
        INSERT INTO contacts (
            name,job,email
        )
        VALUES (?,?,?)
        """
    )
    # Use .addBindValue() to insert data
    for name,email in data:
        insertDataQuery.addBindValue(name)
        insertDataQuery.addBindValue(job)
        insertDataQuery.addBindValue(email)
        insertDataQuery.exec_()

    # Note that you need to run `QSqlDatabase().commit()`` if you want the data to be committed in the database.  

现在把它们放在一起:

app = QApplication([sys.argv])

# Connect to sample database
sampleDb = QSqlDatabase.addDatabase("QSQLITE")
sampleDb.setDatabaseName("sample.sqlite")
sampleDb.open()


# Create table with sample data
table = createTable()

# Get data from table
data = getData(table)

# Insert data into the database
insertData(data)


sys.exit(app.exec_())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。