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_())