当前位置: 首页 > news >正文

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) -> list[TeacherEntity]:
        """
 
        :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 = "")-> list[TeacherEntity]:
        """
 
        :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 = "") -> int:
        """
 
        :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

相关文章:

  • Ollama本地部署大模型(Mac M1 )
  • 生物电阻抗技术:精准洞察人体营养的“智能窗口”
  • 安固软件上网行为管理软件:提升企业效率与安全的双重保障
  • MongoDB用户管理和复制组
  • 基于multisim的自动干手器设计与仿真
  • GitHub神秘组织3小时极速复刻Manus
  • 【C++多线程】std::async和std::future
  • 《从零构建企业级容器镜像生态:Harbor与Registry双星架构实战手记》
  • 【redis】布隆过滤器的Java实现
  • DR和BDR的选举规则
  • 蓝桥-找到最多的数-oj3227
  • Android Telephony 四大服务和数据网络控制面数据面介绍
  • Denoising Diffusion Probabilistic Models
  • HTML单页在线自适应拟态影院源码
  • java2025年常见设计模式面试题
  • 我的三维引擎独立开发之路:坚持与迷茫
  • 通领科技冲刺北交所
  • 计算机网络:计算机网络的概念
  • 【JavaScript】09-构造函数+数据常用函数
  • Node.js原型链污染
  • 300元做网站/网站的推广方法
  • 温州百度网站快速优化/seo网站排名的软件
  • 政府类免费网站模板/北京seo运营
  • 昆明网站建设培训/河南网站公司
  • 建设网站需要什么人员/google chrome
  • 做房产抵押网站需要什么手续费/网站主页