1.项目结构
sql:
CREATE TABLE IF NOT EXISTS School (
SchoolId TEXT not null,
SchoolName TEXT NOT NULL,
SchoolTelNo TEXT NOT NULL
)
整体思路
- Model:负责与 SQLite 数据库进行交互,包括创建表、插入、删除、更新和查询数据等操作。
- View:使用 Tkinter 和
ttk.Treeview
创建用户界面,包含输入框、按钮和分页控件,用于显示数据并处理用户的交互。 - Controller:处理用户界面的事件,调用 Model 中的方法进行数据操作,并更新 View 中的显示。
代码实现:
Model 部分
# encoding: utf-8
# 版权所有 2024 ©涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 oracle 11g sqlite
# Datetime : 2024-11-20 22:35:21
# database :sql server 2019
# User : geovindu
# Product : PyCharm
# Project : pySQLiteMvcDemo
# File : bll/School.py
# explain : 学习
from __future__ import annotations
from abc import ABC, abstractmethod
import os
import sys
from Model.school import SchoolInfo
from Factory.AbstractFactory import AbstractFactory
class SchoolBll(object):
"""
学校表
"""
dal = AbstractFactory.createSchool
"""
类属性 接口DAL
"""
def __init__(self):
"""
"""
self.__name = "SchoolBll"
self.createtable() # 如果不存在,初始化表
def __del__(self):
"""
:return:
"""
print(f"{self.__name} ERASE MEMORY")
def Close(cls):
"""
关闭
:return:
"""
cls.dal().Close()
def createtable(self):
"""
建表
"""
self.dal().createtable()
def selectData(self) -> list:
"""
:return:
"""
data = self.dal().selectSql()
return data
def select(self) -> list[SchoolInfo]:
"""
:return:
"""
schools = []
data = self.dal().selectSql()
if len(data) > 0:
for SchoolId,SchoolName,SchoolTelNo in data[0]:
info = SchoolInfo()
info.SchoolId = SchoolId
info.SchoolName = SchoolName
info.SchoolTelNo = SchoolTelNo
schools.append(info)
return schools
def selectSql(cls) -> list[SchoolInfo]:
"""
元组数据
:return: list 列表
"""
schools = []
data = cls.dal().selectSql()
if len(data) > 0:
for SchoolId,SchoolName,SchoolTelNo in data[0]:
info=SchoolInfo()
info.SchoolId = SchoolId
info.SchoolName = SchoolName
info.SchoolTelNo = SchoolTelNo
schools.append(info)
return schools
def selectSqlCount(cls) -> int:
"""
查询数据 总数
:return:
"""
#print(cls.dal().selectSqlCount()[0][0])
total = cls.dal().selectSqlCount()[0][0]
return total
def Count(self) -> int:
"""
查询数据 总数
:return:
"""
total = self.dal().selectSqlCount()[0][0]
return total
def getcount(cls, search_query=""):
"""
计算
:param search_query:
:return:
"""
return cls.dal().getcount(search_query)
def getschools(cls, page, limit, search_query=""):
"""
查询
:param page:
:param limit:
:param search_query:
:return:
"""
data=cls.dal().getschools(page, limit, search_query)
print("data:",data)
return data
def selectSqlOrder(cls, order: str) -> list[SchoolInfo]:
"""
元组数据
:param order: SchoolName desc/asc
:return:
"""
schools = []
data = cls.dal().selectSqlOrder(order)
if len(data) > 0:
for SchoolId,SchoolName,SchoolTelNo in data[0]:
info=SchoolInfo()
info.SchoolId = SchoolId
info.SchoolName = SchoolName
info.SchoolTelNo = SchoolTelNo
schools.append(info)
return schools
def selectSort(cls,field:str,isOrder:bool)->list[SchoolInfo]:
"""
:param field SchoolId
:param order: desc/asc
:return:
"""