python: DDD+ORM using oracle 21c

sql script:

create table GEOVINDU.School --創建表
(
SchoolId char(5) NOT NULL, --
SchoolName nvarchar2(500) NOT NULL,
SchoolTelNo varchar(8) NULL,
PRIMARY KEY (SchoolId) --#主鍵
);

create table GEOVINDU.Teacher
(
TeacherId char(5) NOT NULL ,
TeacherFirstName nvarchar2(100) NOT NULL,
TeacherLastName nvarchar2(20) NOT NULL,
TeacherGender char(2) NOT NULL,
TeacherTelNo varchar(8) NULL,
TeacherSchoolId char(5) NOT NULL,
PRIMARY KEY (TeacherId), ---#主鍵
FOREIGN KEY(TeacherSchoolId) REFERENCES School(SchoolId) --#外鍵
);

  

项目结构:

 

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/3/7 20:26
# User      : geovindu
# Product   : PyCharm
# Project   : pyOracleDDDOrmDemo
# File      : teacher.py
# explain   : 学习
from sqlalchemy import Column, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import declarative_base,relationship

Base = declarative_base()

class SchoolModel(Base):
    """
    必须小写字母
    """
    __tablename__ = 'school'
    #__table_args__ = {'schema': 'GEOVINDU'} # 11g

    schoolid = Column(String(5), primary_key=True)
    schoolname = Column(String(500), nullable=False)
    schooltelno = Column(String(8))
    teachers = relationship("TeacherModel", back_populates="school")

class TeacherModel(Base):
    """
    必须小写字母
    """
    __tablename__ = 'teacher'
    #__table_args__ = {'schema': 'GEOVINDU'}   # 11g

    teacherid = Column(String(5), primary_key=True)
    teacherfirstname = Column(String(100), nullable=False)
    teacherlastname = Column(String(20), nullable=False)
    teachergender = Column(String(2), nullable=False)
    teachertelno = Column(String(8))
    teacherschoolid = Column(String(5), ForeignKey(SchoolModel.schoolid), nullable=False)

    school = relationship("SchoolModel", back_populates="teachers")  #backref

  

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2025/3/7 20:26
# User      : geovindu
# Product   : PyCharm
# Project   : pyOracleDDDOrmDemo
# File      : teacher.py
# explain   : 学习
from infrastructure.database.oracleHelper import OracleHeler
from infrastructure.model.teacher import TeacherModel
from domain.entities.teacher import TeacherEntity


class TeacherRepository:
    """

    """
    def __init__(self):
        """

        """
        self.Session = OracleHeler()



    def get_all_teachers(self):
        """

        :return:
        """
        session = self.Session.get_session()
        teachers = session.query(TeacherModel).all()
        session.close()
        return [TeacherEntity(teacher.teacherid, teacher.teacherfirstname, teacher.teacherlastname,
                              teacher.teachergender, teacher.teachertelno, teacher.teacherschoolid) for teacher in
                teachers]

    def add_teacher(self, teacher_entity):
        """

        :param teacher_entity:
        :return:
        """
        session = self.Session.get_session()
        new_teacher = TeacherModel(TeacherId=teacher_entity.TeacherId, TeacherFirstName=teacher_entity.TeacherFirstName,
                              TeacherLastName=teacher_entity.TeacherLastName, TeacherGender=teacher_entity.TeacherGender,
                              TeacherTelNo=teacher_entity.TeacherTelNo, TeacherSchoolId=teacher_entity.TeacherSchoolId)
        session.add(new_teacher)
        session.commit()
        session.close()

    def update_teacher(self, teacher_entity):
        """

        :param teacher_entity:
        :return:
        """
        session = self.Session.get_session()
        teacher = session.query(TeacherModel).filter_by(TeacherId=teacher_entity.TeacherId).first()
        if teacher:
            teacher.TeacherFirstName = teacher_entity.TeacherFirstName
            teacher.TeacherLastName = teacher_entity.TeacherLastName
            teacher.TeacherGender = teacher_entity.TeacherGender
            teacher.TeacherTelNo = teacher_entity.TeacherTelNo
            teacher.TeacherSchoolId = teacher_entity.TeacherSchoolId
            session.commit()
        session.close()

    def delete_teacher(self, teacher_id):
        """

        :param teacher_id:
        :return:
        """
        session = self.Session.get_session()
        teacher = session.query(TeacherModel).filter_by(TeacherId=teacher_id).first()
        if teacher:
            session.delete(teacher)
            session.commit()
        session.close()

    def get_all(self, page: int, page_size: int, search_query: str = ""):
        """

        :param page:
        :param page_size:
        :param search_query:
        :return:
        """
        session = self.Session.get_session()
        query = session.query(TeacherModel)
        if search_query:
            query = query.filter(
                (TeacherModel.teacherid.contains(search_query)) |
                (TeacherModel.teacherfirstname.contains(search_query)) |
                (TeacherModel.teacherlastname.contains(search_query)) |
                (TeacherModel.teachergender.contains(search_query)) |
                (TeacherModel.teachertelno.contains(search_query)) |
                (TeacherModel.teacherschoolid.contains(search_query))
            )

        offset = (page - 1) * page_size
        query = query.order_by(TeacherModel.teacherid)  # 这里以 TeacherId 为例进行排序,你可以根据实际需求修改排序字段
        total = query.count()
        # print(" teacher total", total)
        teacher_models = query.offset(offset).limit(page_size).all()
        session.close()
        return [TeacherEntity(teacher.teacherid, teacher.teacherfirstname, teacher.teacherlastname,
                        teacher.teachergender, teacher.teachertelno, teacher.teacherschoolid)
                for teacher in teacher_models]

    def get_total_count(self, search_query: str = ""):
        """

        :param search_query:
        :return:
        """
        session = self.Session.get_session()
        query = session.query(TeacherModel)
        if search_query:
            query = query.filter(
                (TeacherModel.teacherid.contains(search_query)) |
                (TeacherModel.teacherfirstname.contains(search_query)) |
                (TeacherModel.teacherlastname.contains(search_query)) |
                (TeacherModel.teachergender.contains(search_query)) |
                (TeacherModel.teachertelno.contains(search_query)) |
                (TeacherModel.teacherschoolid.contains(search_query))
            )
        count = query.count()
        session.close()
        return count

  

 

posted @ 2025-03-07 21:32  ®Geovin Du Dream Park™  阅读(20)  评论(0)    收藏  举报