Python 3.x 如何连接一个sqlite表中的三个feild记录并将其插入到第二个表的一个feild中?

Python 3.x 如何连接一个sqlite表中的三个feild记录并将其插入到第二个表的一个feild中?,python-3.x,sqlite,pyqt5,qsqlquery,qsqldatabase,Python 3.x,Sqlite,Pyqt5,Qsqlquery,Qsqldatabase,下面是我的示例代码: 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):

下面是我的示例代码:

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, 220, 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, 93, 133, 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, 145, 133, 20))
        self.desig_line.setObjectName("desig_line")
        self.mobile_line = QtWidgets.QLineEdit(self.centralwidget)
        self.mobile_line.setGeometry(QtCore.QRect(164, 119, 133, 20))
        self.mobile_line.setObjectName("mobile_line")
        self.firstNameLabel = QtWidgets.QLabel(self.centralwidget)
        self.firstNameLabel.setGeometry(QtCore.QRect(102, 67, 51, 16))
        self.firstNameLabel.setObjectName("firstNameLabel")
        self.tilteLabel = QtWidgets.QLabel(self.centralwidget)
        self.tilteLabel.setGeometry(QtCore.QRect(102, 41, 20, 16))
        self.tilteLabel.setObjectName("tilteLabel")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 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, mobile 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, _translate("MainWindow", "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。 是否可以将所需列数据从一个表连接到第二个表列。例如,在第一个表中有五列,我需要将“title”、“first name”和“last name”连接为“全名”,并且应该将其插入到第二个表中,作为“全名”列。需要将第一个表中的“移动”列值插入第二个表中的“移动”列,并将第一个表中的“指定”列插入第二个表中的“指定”列。如果可能的话,怎么办?如果有任何解决方案会有所帮助。 请找到图片以供参考。

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

从PyQt5导入QtWidgets、QtSql
查询=(
"""
创建表(如果不存在)详细信息(
标题文本,
名字文本,
姓氏文本,
移动文本,
名称文本
)""",
"""
如果视图不存在,则创建表(
全名文本,
移动文本,
名称(文本)
""",
"""
如果插入详细信息后不存在触发器,则创建触发器
插入后
关于细节
开始
插入视图(完整、移动、指定)
值(NEW.first_name | |“”| | NEW.last_name、NEW.mobile、NEW.designation);
结束;“”“,
"""
如果在更新详细信息后不存在触发器,则创建触发器
更新后
关于细节
开始
更新视图
设置full=NEW.first_name | |“”| | NEW.last_name,mobile=NEW.mobile,designation=NEW.designation
其中NEW.rowid=rowid;
结束;
""",
"""
如果删除详细信息后不存在触发器,则创建触发器
删除后
关于细节
开始
从视图中删除
其中OLD.rowid=rowid;
结束;
"""
)
def create_connection():
db=QtSql.QSqlDatabase.addDatabase(“QSQLITE”)
db.setDatabaseName(“employee.db”)
如果不是db.open():
打印(db.lastError().text())
返回错误
返回真值
类ReadOnlyDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(自身、父项、选项、索引):
通过
类MainWindow(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
super()。\uuuu init\uuuu(父级)
self.title_combo=qtwidts.QComboBox()
self.title_combo.addItems([“先生”,“女士])
self.first\u name\u line=QtWidgets.QLineEdit()
self.last_name_line=qtwidts.QLineEdit()
self.mobile_line=QtWidgets.QLineEdit()
self.desig_line=qtwidts.QLineEdit()
self.save_btn=qtwidts.QPushButton(“保存”)
self.detail_view=qtwidts.QTableView()
self.detail_model=QtSql.QSqlTableModel()
自我详细信息\模型可设置(“详细信息”)
self.detail\u model.select()
self.detail\u view.setModel(self.detail\u model)
self.table_view=qtwidts.QTableView()
self.view_model=QtSql.QSqlTableModel()
self.view\u model.setable(“视图”)
self.view\u model.select()
self.table\u view.setModel(self.view\u model)
self.table_视图.setItemDelegate(ReadOnlyDelegate(self.table_视图))
form_widget=qtwidts.QWidget()
form\u layout=qtwidts.QFormLayout(form\u小部件)
form_layout.addRow(“Title”,self.Title_组合)
form_layout.addRow(“名字”,自我名字行)
form_layout.addRow(“姓氏”,self.Last_Name_行)
form_layout.addRow(“移动”,自移动线)
表格布局添加行(“名称”,自行设计行)
form_layout.addRow(self.save_btn)
form_widget.setFixedSize(form_widget.sizeHint())
central_widget=qtwidts.QWidget()
self.setCentralWidget(中心窗口小部件)
hlay1=qtwidts.QHBoxLayout()
hlay1.addWidget(表单小部件)
hlay1.addStretch()
hlay2=qtwidts.QHBoxLayout()
hlay2.addWidget(self.detail\u视图)
hlay2.addWidget(self.table_视图)
vboxlayout=QtWidgets.QVBoxLayout(中心小部件)
vboxlayout.addLayout(hlay1)
vboxlayout.addLayout(hlay2)
自我调整大小(640480)
self.save\u btn.clicked.connect(self.insert\u行)
def插入_行(自身):
r=self.detail\u model.record()
r、 setValue(“title”,self.title\u combo.currentText())
r、 setValue(“first\u name”,self.first\u name\u line.text())
r、 setValue(“last\u name”,self.last\u name\u line.text())
r、 setValue(“mobile”,self.mobile\u line.text())
r、 设置值(“名称”,self.desig_line.text())
self.detail\u model.insertRecord(-1,r)
self.detail\u model.select()
self.view\u model.select()
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
如果没有,请创建_连接():
系统出口(-1)
对于查询中的查询\u str:
query=QtSql.QSqlQuery(query\u str)
如果不是,则query.exec_389;()
打印(query.lastError().text())
w=主窗口()
w、 show()
sys.exit(app.exec_())