mysql sql script:
create table School 表
(
`SchoolId` char(5) NOT NULL comment'主鍵primary key,學校編號',
`SchoolName` nvarchar(500) NOT NULL DEFAULT '' comment' 學校名稱',
`SchoolTelNo` varchar(8) NULL DEFAULT '' comment'電話號碼',
PRIMARY KEY (SchoolId) #主鍵
)COMMENT='學校表 School Table' DEFAULT CHARSET=utf8;
create table Teacher
(
`TeacherId` char(5) NOT NULL comment'主鍵primary key,老师編號',
`TeacherFirstName` nvarchar(100) NOT NULL DEFAULT '' comment' 名',
`TeacherLastName` nvarchar(20) NOT NULL DEFAULT '' comment' 姓',
`TeacherGender` char(2) NOT NULL DEFAULT '' comment'性別',
`TeacherTelNo` varchar(8) NULL DEFAULT '' comment'電話號碼',
`TeacherSchoolId` char(5) NOT NULL DEFAULT '' comment'外鍵 foreign key 學校ID',
PRIMARY KEY (TeacherId), #主鍵
FOREIGN KEY(TeacherSchoolId) REFERENCES School(SchoolId) #外鍵
)COMMENT='老師表Teacher Table' DEFAULT CHARSET=utf8;
项目结构
领域层(Domain Layer)
# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : Ubuntu 24.0
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/20 20:23
# User : geovindu
# Product : PyCharm
# Project : pyMySqlDDDOrmDemo
# File : domain/entities/school.py
# explain : 学习
'''
create table School 表
(
`SchoolId` char(5) NOT NULL comment'主鍵primary key,學校編號',
`SchoolName` nvarchar(500) NOT NULL DEFAULT '' comment' 學校名稱',
`SchoolTelNo` varchar(8) NULL DEFAULT '' comment'電話號碼',
PRIMARY KEY (SchoolId) #主鍵
)COMMENT='學校表 School Table' DEFAULT CHARSET=utf8;
'''
class School:
"""
领域层(Domain Layer)
定义业务实体
"""
def __init__(self, school_id, school_name, school_tel_no):
"""
:param school_id: 學校編號
:param school_name: 學校名稱
:param school_tel_no:電話號碼
"""
self.school_id = school_id
self.school_name = school_name
self.school_tel_no = school_tel_no
# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : Ubuntu 24.0
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/20 20:27
# User : geovindu
# Product : PyCharm
# Project : pyMySqlDDDOrmDemo
# File : domain/repositories/school.py
# explain : 学习
from abc import ABC, abstractmethod
from typing import List
from ..entities.school import School
class SchoolRepository(ABC):
"""
领域层(Domain Layer)
存储库接口
"""
@abstractmethod
def add(self, school: School):
pass
@abstractmethod
def update(self, school: School):
pass
@abstractmethod
def delete(self, school_id: str):
"""
删除
:param school_id:
:return:
"""
pass
def get_schoolall(self) -> List[School]:
"""
所有
:return:
"""
pass
@abstractmethod
def get_all(self, page: int, page_size: int, search_query: str = "") -> List[School]:
"""
分页
:param page:
:param page_size:
:param search_query:
:return:
"""
pass
@abstractmethod
def get_total_count(self, search_query: str = "") -> int:
pass
基础设施层(Infrastructure Layer)
# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司 ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# OS : Ubuntu 24.0
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 oracle 21c Neo4j
# Datetime : 2025/2/20 20:46
# User : geovindu
# Product : PyCharm
# Project : pyMySqlDDDOrmDemo
# File : infrastructure/model/school.py
# explain : 学习
from sqlalchemy import create_engine, Column, String, ForeignKey
from sqlalchemy.orm import sessionmaker, declarative_base, relationship
Base = declarative_base()
class SchoolModel(Base):
"""
基础设施层(Infrastructure Layer)
数据库交互
分开会报错
"""
__tablename__ = 'School'
SchoolId = Column(String(5), primary_key=True)
SchoolName = Column(String(500), nullable=False, default='')
SchoolTelNo = Column(String(8), nullable=True, default='')
teacher