欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyQt5?python?數(shù)據(jù)庫?表格動態(tài)增刪改詳情

 更新時間:2022年01月26日 11:13:04   作者:CAMlive  
這篇文章主要介紹了PyQt5?python?數(shù)據(jù)庫?表格動態(tài)增刪改詳情,首先手動連接數(shù)據(jù)庫與下一個的程序連接數(shù)據(jù)庫是獨(dú)立的2個部分,下面來看看文章的詳細(xì)介紹

 

(一)、手動連接數(shù)據(jù)庫

與下一個的程序連接數(shù)據(jù)庫是獨(dú)立的2個部分

(4)屬性中的連接字符串

(二)、編程中使用數(shù)據(jù)庫

效果圖:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtCore
from copy import copy
import sys
import pymysql

ins="insert into student (Sno,Sname,Sage,Ssex,Stele) values ('{}','{}','{}','{}','{}');"
delete="delete from student where Sno={}"
sel="select * from student"
upd="update student set Sname='{}',Sage='{}',Ssex='{}',Stele='{}' where Sno={};"

def getCursor():
? ? """
? ? :return: 返回操作數(shù)據(jù)庫的cursor
? ? """
? ? conn = pymysql.connect(host='127.0.0.1' ?# 連接名稱,默認(rèn)127.0.0.1
? ? ? ? ? ? ? ? ? ? ? ? ? ?, user='root' ?# 用戶名
? ? ? ? ? ? ? ? ? ? ? ? ? ?, passwd='' ?# 密碼
? ? ? ? ? ? ? ? ? ? ? ? ? ?, port=3306 ?# 端口,默認(rèn)為3306
? ? ? ? ? ? ? ? ? ? ? ? ? ?, db='mysql' ?# 數(shù)據(jù)庫名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ?, charset='utf8' ?# 字符編碼
? ? ? ? ? ? ? ? ? ? ? ? ? ?)
? ? return conn

def ExecuSQL(argv):
? ? """
? ? 執(zhí)行數(shù)據(jù)庫的語句,但是沒有返回值
? ? :param argv:
? ? """
? ? conn=getCursor()
? ? cur = conn.cursor() ?# 生成游標(biāo)對象
? ? cur.execute(argv) ?# 執(zhí)行SQL語句
? ? conn.commit()
? ? cur.close() ?# 關(guān)閉游標(biāo)
? ? conn.close() ?# 關(guān)閉連接

def getData(argv):
? ? """
? ? 執(zhí)行數(shù)據(jù)庫的語句,有返回值
? ? :param argv:
? ? """
? ? conn = getCursor()
? ? cur = conn.cursor() ?# 生成游標(biāo)對象
? ? cur.execute(argv) ?# 執(zhí)行SQL語句
? ? data = cur.fetchall() ?# 通過fetchall方法獲得數(shù)據(jù)
? ? cur.close() ?# 關(guān)閉游標(biāo)
? ? conn.close() ?# 關(guān)閉連接
? ? return data

class Example(QWidget):
? ? def __init__(self, parent=None):
? ? ? ? super(Example, self).__init__(parent)
? ? ? ? hhbox = QHBoxLayout() ?# 橫向布局
? ? ? ? hhbox_1=QHBoxLayout()
? ? ? ? vbox=QVBoxLayout()


? ? ? ? self.displayList = []
? ? ? ? self.saveList = []
? ? ? ? self.table = QTableWidget()

? ? ? ? self.addItem=QPushButton("添加數(shù)據(jù)")
? ? ? ? self.searchItem=QPushButton("刷新數(shù)據(jù)")
? ? ? ? self.deleteItem = QPushButton("刪除數(shù)據(jù)")
? ? ? ? self.saveItem=QPushButton("保存數(shù)據(jù)")

? ? ? ? self.table_sitting()
? ? ? ? hhbox.addWidget(self.table) ?# 把表格加入布局
? ? ? ? hhbox_1.addWidget(self.addItem)
? ? ? ? hhbox_1.addWidget(self.searchItem)
? ? ? ? hhbox_1.addWidget(self.deleteItem)
? ? ? ? hhbox_1.addWidget(self.saveItem)
? ? ? ? vbox.addLayout(hhbox)
? ? ? ? vbox.addLayout(hhbox_1)
? ? ? ? self.setLayout(vbox) ?# 創(chuàng)建布局
? ? ? ? self.setWindowTitle("數(shù)據(jù)庫—表格")
? ? ? ? self.setWindowIcon(QIcon("icon.png"))

? ? ? ? self.connecter()

? ? ? ? self.resize(680, 600)
? ? ? ? self.show()

? ? def connecter(self):
? ? ? ? self.addItem.clicked.connect(self._addItem)
? ? ? ? self.deleteItem.clicked.connect(self._deleteItem)
? ? ? ? self.searchItem.clicked.connect(self._redraw)
? ? ? ? self.saveItem.clicked.connect(self._saveItem)
? ? ? ? self.table.itemChanged.connect(self._dataChanged)

? ? def _dataChanged(self):
? ? ? ? """
? ? ? ? 一旦檢測到數(shù)據(jù)改變,則進(jìn)行檢查,
? ? ? ? 選擇添加新數(shù)據(jù)還是對原數(shù)據(jù)進(jìn)行修改
? ? ? ? :return:
? ? ? ? """
? ? ? ? row_select = self.table.selectedItems()
? ? ? ? if len(row_select) == 0:
? ? ? ? ? ? return
? ? ? ? row= row_select[0].row()
? ? ? ? content = (self.table.item(row, 0).text(), self.table.item(row, 1).text(),
? ? ? ? ? ? ? ? ? ?self.table.item(row, 2).text(), self.table.item(row, 3).text(),
? ? ? ? ? ? ? ? ? ?self.table.item(row, 4).text())

? ? ? ? if row<=len(self.displayList):
? ? ? ? ? ? print("修改行",content)
? ? ? ? ? ? self.displayList[row-1]=content
? ? ? ? else:
? ? ? ? ? ? print("最新行",content)
? ? ? ? ? ? self.displayList.append(content)

? ? def _addItem(self):
? ? ? ? """
? ? ? ? 添加空白行按鈕的觸發(fā)事件
? ? ? ? 添加后刷新視圖
? ? ? ? """
? ? ? ? num = self.table.rowCount()-1
? ? ? ? self.newLine(num)
? ? ? ? self.update()

? ? def init(self):
? ? ? ? """
? ? ? ? 初始化操作
? ? ? ? 即從數(shù)據(jù)庫加載數(shù)據(jù)
? ? ? ? """
? ? ? ? argv="select * from student"
? ? ? ? data=getData(argv)
? ? ? ? print("初始化")
? ? ? ? for index,item in enumerate(data):
? ? ? ? ? ? self.newLine(index+1,item=item)
? ? ? ? ? ? self.displayList.append(item)
? ? ? ? self.saveList=copy(self.displayList)
? ? ? ? self.update()

? ? def _redraw(self):
? ? ? ? """
? ? ? ? repaint即刷新數(shù)據(jù),
? ? ? ? 用保存的數(shù)據(jù)覆蓋未保存的數(shù)據(jù)
? ? ? ? """
? ? ? ? self.table.setRowCount(0)
? ? ? ? self.table.clearContents()
? ? ? ? self.table_sitting(flag=0)
? ? ? ? for index,item in enumerate(self.saveList):
? ? ? ? ? ? self.newLine(index+1,item)
? ? ? ? self.update()

? ? def _deleteItem(self):
? ? ? ? """
? ? ? ? 若有選中行,點(diǎn)擊刪除后即可刪除
? ? ? ? :return:
? ? ? ? """
? ? ? ? # ExecuSQL()
? ? ? ? row_select = self.table.selectedItems()
? ? ? ? if len(row_select) == 0:
? ? ? ? ? ? return
? ? ? ? id = row_select[0].row()
? ? ? ? if int(id)<len(self.displayList):
? ? ? ? ? ? print("刪除一條數(shù)據(jù)")
? ? ? ? ? ? self.displayList.pop(id-1)
? ? ? ? self.header.pop()
? ? ? ? self.table.removeRow(row_select[0].row())
? ? ? ? self.update()

? ? def _saveItem(self):
? ? ? ? """
? ? ? ? 點(diǎn)擊保存需要
? ? ? ? 篩選出需要更新的數(shù)據(jù)
? ? ? ? 需要刪除的數(shù)據(jù)
? ? ? ? 需要添加的數(shù)據(jù)
? ? ? ? """
? ? ? ? idList=[int(k[0]) for k in self.saveList]
? ? ? ? _idList=[int(k[0]) for k in self.displayList]
? ? ? ? print("點(diǎn)擊保存")
? ? ? ? # print(self.saveList)
? ? ? ? # print(self.displayList)
? ? ? ? for item in self.displayList:
? ? ? ? ? ? if item not in self.saveList:
? ? ? ? ? ? ? ? print("存在修改數(shù)據(jù)")
? ? ? ? ? ? ? ? if item[0] not in idList:
? ? ? ? ? ? ? ? ? ? sql=ins.format(item[0],item[1], item[2], item[3], item[4])
? ? ? ? ? ? ? ? ? ? print(sql)
? ? ? ? ? ? ? ? ? ? ExecuSQL(sql)
? ? ? ? ? ? ? ? ? ? print("insert")
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? sql = upd.format(item[1], item[2], item[3], item[4],item[0])
? ? ? ? ? ? ? ? ? ? print(sql)
? ? ? ? ? ? ? ? ? ? ExecuSQL(sql)
? ? ? ? ? ? ? ? ? ? print("update")
? ? ? ? for item in self.saveList:
? ? ? ? ? ? if item[0] not in _idList:
? ? ? ? ? ? ? ? sql = delete.format(item[0])
? ? ? ? ? ? ? ? print(sql)
? ? ? ? ? ? ? ? ExecuSQL(sql)
? ? ? ? ? ? ? ? print("delete",item)
? ? ? ? self.saveList=copy(self.displayList)

? ? def newLine(self,num,item=None):
? ? ? ? """
? ? ? ? :param num: 在對應(yīng)序號處的序號畫空白行
? ? ? ? :param item: 輸入為對應(yīng)數(shù)據(jù)
? ? ? ? """
? ? ? ? # num=self.table.rowCount()
? ? ? ? self.table.insertRow(num)
? ? ? ? _0= QTableWidgetItem("")
? ? ? ? _0.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
? ? ? ? _1 = QTableWidgetItem("")
? ? ? ? _2 = QTableWidgetItem("")
? ? ? ? _3 = QTableWidgetItem("")
? ? ? ? _4 = QTableWidgetItem("")
? ? ? ? # item=studentInfo()
? ? ? ? if item !=None:
? ? ? ? ? ? _0.setText(str(item[0]))
? ? ? ? ? ? _1.setText(str(item[1]))
? ? ? ? ? ? _2.setText(str(item[2]))
? ? ? ? ? ? _3.setText(str(item[3]))
? ? ? ? ? ? _4.setText(str(item[4]))
? ? ? ? else:
? ? ? ? ? ? _0.setText(str(num))

? ? ? ? self.table.setItem(num, 0, _0)
? ? ? ? self.table.setItem(num, 1, _1)
? ? ? ? self.table.setItem(num, 2, _2)
? ? ? ? self.table.setItem(num, 3, _3)
? ? ? ? self.table.setItem(num, 4, _4)
? ? ? ? self.header.append(str(num))
? ? ? ? self.table.setVerticalHeaderLabels(self.header)
? ? ? ? self.update()

? ? def table_sitting(self,flag=1):
? ? ? ? """
? ? ? ? :param flag: 初始化表頭和行列數(shù)
? ? ? ? """
? ? ? ? self.header = [""]
? ? ? ? self.table.setColumnCount(5)
? ? ? ? self.table.setRowCount(2) ?# 設(shè)置表格有兩行五列
? ? ? ? self.table.setItem(0, 0, QTableWidgetItem(" ? ? ? ? ? 學(xué)號"))
? ? ? ? self.table.setItem(0, 1, QTableWidgetItem("名字"))
? ? ? ? self.table.setItem(0, 2, QTableWidgetItem("出生日期"))
? ? ? ? self.table.setItem(0, 3, QTableWidgetItem("性別"))
? ? ? ? self.table.setItem(0, 4, QTableWidgetItem("電話號碼"))
? ? ? ? if flag:
? ? ? ? ? ? self.init()

if __name__ == "__main__":
? ? app = QApplication(sys.argv)
? ? dlg = Example()
? ? sys.exit(app.exec_())
++

到此這篇關(guān)于PyQt5 python 數(shù)據(jù)庫 表格動態(tài)增刪改詳情的文章就介紹到這了,更多相關(guān)PyQt5 python 數(shù)據(jù)庫 表格動態(tài)增刪改內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論