我的目的是实现检查所有图书的库存量,当有图书库存量小于5时,会弹出警示框提示库存不足,在数据库模块和功能实现模块如何编写?
功能实现模块
def initTable(self):
"""
根据条件初始化表格
:return:
"""
bookName = self.s_bookNameInput.text()
authorName = self.s_authorInput.text()
TID = self.s_ComboBox.currentData()
s_book = Book(bookName, authorName, TID)
result = bookDao.list(s_book)
row = 0
if result:
row = len(result)
self.bookListTable.setColumnCount(9)
self.bookListTable.setRowCount(row)
self.bookListTable.verticalHeader().setVisible(False) # 隐藏垂直标题 序号
self.bookListTable.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) # 禁止编辑单元格
self.bookListTable.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
self.bookListTable.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
self.bookListTable.setHorizontalHeaderLabels(
['图书编号', '图书名称', '图书作者', '作者年龄', '作者性别', '图书价格', '库存量', '图书类别', '图书简介'])
self.bookListTable.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) # 列头自适应
self.bookListTable.setSelectionBehavior(
QAbstractItemView.SelectionBehavior.SelectRows) # 设置选择行为,以行为单位
for i in range(row):
for j in range(9):
data = QTableWidgetItem(str(result[i][j]))
# 设置单元格内容居中对齐
data.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.bookListTable.setItem(i, j, data)
def initForm(self, index: QModelIndex):
"""
初始化Form
:param index:
:return:
"""
rowIndex = index.row() # 获取行索引
self.idInput.setText(self.bookListTable.item(rowIndex, 0).text()) # 设置id编号
self.idInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.bookNameInput.setText(self.bookListTable.item(rowIndex, 1).text()) # 设置图书名称
self.bookNameInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
column_index_for_intro = 1
self.bookListTable.horizontalHeader().setSectionResizeMode(column_index_for_intro,
QHeaderView.ResizeMode.ResizeToContents)
self.authorInput.setText(self.bookListTable.item(rowIndex, 2).text()) # 设置作者名称
self.authorInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.ageInput.setText(self.bookListTable.item(rowIndex, 3).text()) # 设置作者年龄
self.ageInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
if self.bookListTable.item(rowIndex, 4).text() == "男": # 设置性别
self.manRadio.setChecked(True)
else:
self.femaleRadio.setChecked(True)
self.priceInput.setText(self.bookListTable.item(rowIndex, 5).text()) # 设置图书价格
self.priceInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.stockInput.setText(self.bookListTable.item(rowIndex, 6).text()) # 设置图书库存量
self.stockInput.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.bookTypeComboBoX.setCurrentText(self.bookListTable.item(rowIndex, 7).text()) # 设置图书类别
self.bookDescInput.setPlainText(self.bookListTable.item(rowIndex, 8).text()) # 设置图书简介
column_index_for_intro = 8
self.bookListTable.horizontalHeader().setSectionResizeMode(column_index_for_intro,
QHeaderView.ResizeMode.ResizeToContents)
数据库模块
def check(book: Book) -> int:
"""
更新数据
:param s_book:
:return:
"""
con = None
try:
con = dbUtil.getCon()
cursor = con.cursor()
# 更新数据
sql = f"SELECT bid,stock FROM t_book WHERE stock<5"
cursor.execute(sql)
con.commit()
return cursor.rowcount
except Exception as e:
print(f"查找数据时发生错误: {e}")
if con is not None:
con.rollback()
return 0
finally:
dbUtil.closeCon(con)