如何将一个sqlite表中的三个领域记录连接起来,并将其插入第二个表的一个领域中?

问题描述

下面是我的示例代码:

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


class Ui_MainWindow(object):
    def setupUi(self,MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800,600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.details_tableview = QtWidgets.QTableView(self.centralwidget)
        self.details_tableview.setGeometry(QtCore.QRect(30,220,381,271))
        self.details_tableview.setObjectName("details_tableview")
        self.full_tableview = QtWidgets.QTableView(self.centralwidget)
        self.full_tableview.setGeometry(QtCore.QRect(440,341,271))
        self.full_tableview.setObjectName("full_tableview")
        self.title_combo = QtWidgets.QComboBox(self.centralwidget)
        self.title_combo.setGeometry(QtCore.QRect(164,41,69,20))
        self.title_combo.setObjectName("title_combo")
        self.title_combo.addItem("")
        self.title_combo.setItemText(0,"")
        self.title_combo.addItem("")
        self.title_combo.addItem("")
        self.save_btn = QtWidgets.QPushButton(self.centralwidget)
        self.save_btn.setGeometry(QtCore.QRect(100,180,75,23))
        self.save_btn.setObjectName("save_btn")
        self.first_name_line = QtWidgets.QLineEdit(self.centralwidget)
        self.first_name_line.setGeometry(QtCore.QRect(164,67,133,20))
        self.first_name_line.setObjectName("first_name_line")
        self.lastNameLabel = QtWidgets.QLabel(self.centralwidget)
        self.lastNameLabel.setGeometry(QtCore.QRect(102,93,50,16))
        self.lastNameLabel.setObjectName("lastNameLabel")
        self.last_name_line = QtWidgets.QLineEdit(self.centralwidget)
        self.last_name_line.setGeometry(QtCore.QRect(164,20))
        self.last_name_line.setObjectName("last_name_line")
        self.designationLabel = QtWidgets.QLabel(self.centralwidget)
        self.designationLabel.setGeometry(QtCore.QRect(102,145,56,16))
        self.designationLabel.setObjectName("designationLabel")
        self.mobileLabel = QtWidgets.QLabel(self.centralwidget)
        self.mobileLabel.setGeometry(QtCore.QRect(102,119,30,16))
        self.mobileLabel.setObjectName("mobileLabel")
        self.desig_line = QtWidgets.QLineEdit(self.centralwidget)
        self.desig_line.setGeometry(QtCore.QRect(164,20))
        self.desig_line.setObjectName("desig_line")
        self.mobile_line = QtWidgets.QLineEdit(self.centralwidget)
        self.mobile_line.setGeometry(QtCore.QRect(164,20))
        self.mobile_line.setObjectName("mobile_line")
        self.firstNameLabel = QtWidgets.QLabel(self.centralwidget)
        self.firstNameLabel.setGeometry(QtCore.QRect(102,51,16))
        self.firstNameLabel.setObjectName("firstNameLabel")
        self.tilteLabel = QtWidgets.QLabel(self.centralwidget)
        self.tilteLabel.setGeometry(QtCore.QRect(102,20,16))
        self.tilteLabel.setObjectName("tilteLabel")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0,800,21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.mobile_line.setValidator(QIntValidator())
        self.save_btn.clicked.connect(self.save_data)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        db.setDatabaseName("employee.db")
        if db.open():
            query = QSqlQuery()
            query.exec_("CREATE TABLE IF NOT EXISTS details(title TEXT,first_name TEXT,last_name TEXT,mobile TEXT,designation TEXT)")
            query.exec_("CREATE TABLE IF NOT EXISTS view(full name TEXT,designation TEXT)")

        self.emp_model = QtSql.QSqlTableModel()
        self.emp_model.setTable("details")
        self.emp_model.select()
        self.details_tableview.setModel(self.emp_model)

        self.view_model = QtSql.QSqlTableModel()
        self.view_model.setTable("view")
        self.view_model.select()
        self.full_tableview.setModel(self.view_model)


    def retranslateUi(self,MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
        self.title_combo.setItemText(1,_translate("MainWindow","Mr."))
        self.title_combo.setItemText(2,"Ms."))
        self.save_btn.setText(_translate("MainWindow","Save"))
        self.lastNameLabel.setText(_translate("MainWindow","Last Name"))
        self.designationLabel.setText(_translate("MainWindow","Designation"))
        self.mobileLabel.setText(_translate("MainWindow","Mobile"))
        self.firstNameLabel.setText(_translate("MainWindow","First Name"))
        self.tilteLabel.setText(_translate("MainWindow","Tilte"))

    def save_data(self):
        data_ = [self.title_combo.currentText(),self.first_name_line.text(),self.last_name_line.text(),self.mobile_line.text(),self.desig_line.text()]
        print(data_)
        r = self.emp_model.record()
        r.setValue("title",self.title_combo.currentText())
        r.setValue("first_name",self.first_name_line.text())
        r.setValue("last_name",self.last_name_line.text())
        r.setValue("mobile",self.mobile_line.text())
        r.setValue("designation",self.desig_line.text())
        
        self.emp_model.insertRecord(-1,r)
        self.emp_model.select()
        
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我正在使用QtSql.QSqlTableModel,QSqlQuery(),QTableView。 是否可以将所需的列数据从一个表连接到第二个表列。例如,在第一个表中有五列,我需要将“标题”,“名字”和“姓氏”连接为“全名”,并且应将其作为“全名”列插入第二个表中。并且需要从第一个表的“ mobile”列值插入到第二个表的“ mobile”列,并从第一个表的“ Designation”列插入到第二个表的“ designation”列。如果可能,该怎么办?如果有任何解决方案会有所帮助。 请找到图片以供参考。

enter image description here

解决方法

如果要在表的行之间创建绑定,则可能的解决方案是创建触发器,然后在修改(插入,更新或删除)表之前修改另一个表。

nextIdx

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...