mysql tableview
时间: 2023-11-20 20:59:43 浏览: 167
mysql view
以下是使用MySQL和TableView的示例代码,可以实现表格设置、排序、数据行数统计、分页、删除、添加和修改等功能:
```python
# 导入必要的模块
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtWidgets import QMessageBox, QTableView, QHeaderView, QAbstractItemView, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLineEdit, QLabel
class TableView(QWidget):
def __init__(self):
super().__init__()
# 初始化数据库连接
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("47.101.128.140")
db.setDatabaseName("mydatabase")
db.setUserName("test1")
db.setPassword("test1")
if not db.open():
QMessageBox.warning(self, "连接提示", "连接失败")
return
# 创建一个模型对象
self.model = QSqlTableModel()
self.model.setTable("student") # 操作的是student这张表
self.model.select() # 查询所有数据
# 创建一个TableView对象
self.table_view = QTableView()
self.table_view.setModel(self.model) # 将模型与TableView关联起来
self.table_view.setSelectionBehavior(QAbstractItemView.SelectRows) # 设置选择行为,以行为单位
self.table_view.setSelectionMode(QAbstractItemView.SingleSelection) # 设置选择模式,单选
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 设置列宽自适应
self.table_view.verticalHeader().setVisible(False) # 隐藏行表头
# 创建一个水平布局
h_layout = QHBoxLayout()
h_layout.addWidget(self.table_view)
# 创建一个垂直布局
v_layout = QVBoxLayout()
v_layout.addLayout(h_layout)
# 创建一个标签和文本框,用于输入页码
self.page_label = QLabel("第1页")
self.page_edit = QLineEdit()
self.page_edit.setFixedWidth(50)
self.page_edit.setText("1")
self.page_edit.returnPressed.connect(self.goto_page) # 绑定回车事件
# 创建四个按钮,用于跳转到第一页、上一页、下一页、最后一页
self.first_button = QPushButton("第一页")
self.first_button.clicked.connect(self.goto_first_page)
self.prev_button = QPushButton("上一页")
self.prev_button.clicked.connect(self.goto_prev_page)
self.next_button = QPushButton("下一页")
self.next_button.clicked.connect(self.goto_next_page)
self.last_button = QPushButton("最后一页")
self.last_button.clicked.connect(self.goto_last_page)
# 创建一个水平布局,将标签、文本框和四个按钮添加到其中
page_layout = QHBoxLayout()
page_layout.addWidget(self.page_label)
page_layout.addWidget(self.page_edit)
page_layout.addWidget(self.first_button)
page_layout.addWidget(self.prev_button)
page_layout.addWidget(self.next_button)
page_layout.addWidget(self.last_button)
# 创建一个按钮,用于添加一行数据
self.add_button = QPushButton("添加")
self.add_button.clicked.connect(self.add_row)
# 创建一个按钮,用于删除选定行
self.del_button = QPushButton("删除")
self.del_button.clicked.connect(self.del_row)
# 创建一个水平布局,将添加按钮和删除按钮添加到其中
button_layout = QHBoxLayout()
button_layout.addWidget(self.add_button)
button_layout.addWidget(self.del_button)
# 创建一个垂直布局,将页码布局、按钮布局和TableView添加到其中
v_layout.addLayout(page_layout)
v_layout.addLayout(button_layout)
self.setLayout(v_layout)
# 跳转到指定页
def goto_page(self):
page = int(self.page_edit.text())
if page < 1:
page = 1
elif page > self.model.rowCount() / 10 + 1:
page = int(self.model.rowCount() / 10 + 1)
self.page_edit.setText(str(page))
self.page_label.setText("第%d页" % page)
self.model.setLimit(10)
self.model.setOffset((page - 1) * 10)
self.model.select()
# 跳转到第一页
def goto_first_page(self):
self.page_edit.setText("1")
self.goto_page()
# 跳转到上一页
def goto_prev_page(self):
page = int(self.page_edit.text())
if page > 1:
page -= 1
self.page_edit.setText(str(page))
self.goto_page()
# 跳转到下一页
def goto_next_page(self):
page = int(self.page_edit.text())
if page < self.model.rowCount() / 10 + 1:
page += 1
self.page_edit.setText(str(page))
self.goto_page()
# 跳转到最后一页
def goto_last_page(self):
page = int(self.model.rowCount() / 10 + 1)
self.page_edit.setText(str(page))
self.goto_page()
# 添加一行数据
def add_row(self):
row = self.model.rowCount()
self.model.insertRow(row)
# 删除选定行
def del_row(self):
rows = self.table_view.selectionModel().selectedRows()
for row in rows:
self.model.removeRow(row.row())
self.model.select()
# 创建一个TableView对象并显示
table_view = TableView()
table_view.show()
```
阅读全文