python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值