python: DDD+ORM using oracle 21c

news2025/3/9 7:33:23

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 LeNet 网络的 MNIST 数据集图像分类

1.LeNet的原始实验数据集MNIST 名称:MNIST手写数字数据集 数据类型:灰度图 (一通道) 图像大小:28*28 类别数:10类(数字0-9) 1.通过torchvision.datasets.MNIST下载并保存到本地…

Day4 C语言与画面显示练习

文章目录 1. harib01a例程2. harib01b例程3. harib01e例程4. harib01f例程5. harib01h例程 1. harib01a例程 上一章主要是将画面搞成黑屏,如果期望做点什么图案,只需要再VRAM里写点什么就好了,使用nask汇编语言实现一个函数write_mem8&#…

一周热点-OpenAI 推出了 GPT-4.5,这可能是其最后一个非推理模型

在人工智能领域,大型语言模型一直是研究的热点。OpenAI 的 GPT 系列模型在自然语言处理方面取得了显著成就。GPT-4.5 是 OpenAI 在这一领域的又一力作,它在多个方面进行了升级和优化。 1 新模型的出现 GPT-4.5 目前作为研究预览版发布。与 OpenAI 最近的 o1 和 o3 模型不同,…

《UE5_C++多人TPS完整教程》学习笔记34 ——《P35 网络角色(Network Role)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P35 网络角色(Network Role)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Stephe…

手写简易Tomcat核心实现:深入理解Servlet容器原理

目录 一、Tomcat概况 1. tomcat全局图 2.项目结构概览 二、实现步骤详解 2.1 基础工具包(com.qcby.util) 2.1.1 ResponseUtil:HTTP响应生成工具 2.1.2 SearchClassUtil:类扫描工具 2.1.3 WebServlet:自定义注解…

mac本地安装运行Redis-单机

记录一下我以前用的连接服务器的跨平台SSH客户端。 因为还要准备毕设...... 服务器又过期了,只能把redis安装下载到本地了。 目录 1.github下载Redis 2.安装homebrew 3.更新GCC 4.自行安装Redis 5.通过 Homebrew 安装 Redis 安装地址:https://git…

【ThreeJS Basics 09】Debug

文章目录 简介从 dat.GUI 到 lil-gui例子安装 lil-gui 并实例化不同类型的调整改变位置针对非属性的调整复选框颜色 功能/按钮调整几何形状文件夹调整 GUI宽度标题关闭文件夹隐藏按键切换 结论 简介 每一个创意项目的一个基本方面是能够轻松调整。开发人员和参与项目的其他参与…

【笔记】STM32L4系列使用RT-Thread Studio电源管理组件(PM框架)实现低功耗

硬件平台:STM32L431RCT6 RT-Thread版本:4.1.0 目录 一.新建工程 二.配置工程 ​编辑 三.移植pm驱动 四.配置cubeMX 五.修改驱动文件,干掉报错 六.增加用户低功耗逻辑 1.设置唤醒方式 2.设置睡眠时以及唤醒后动作 ​编辑 3.增加测试命…

类和对象:

1. 类的定义: 1. 类定义格式: 对于我们的类的话,我们是把类看成一个整体,我们的函数里面没有找到我们的成员变量,我们就在我们的类里面找。 我们看我们的第二点: 我们的类里面,我们通常会对…

【十三】Golang 通道

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 通道通道声明初始化缓冲机制无缓冲通道代码示例 带…

软考中级_【软件设计师】知识点之【面向对象】

简介: 软件设计师考试中,面向对象模块为核心考点,涵盖类与对象、继承、封装、多态等基础概念,重点考查UML建模(类图/时序图/用例图)、设计模式(如工厂、单例模式)及SOLID设计原则。要…

分布式锁—7.Curator的分布式锁一

大纲 1.Curator的可重入锁的源码 2.Curator的非可重入锁的源码 3.Curator的可重入读写锁的源码 4.Curator的MultiLock源码 5.Curator的Semaphore源码 1.Curator的可重入锁的源码 (1)InterProcessMutex获取分布式锁 (2)InterProcessMutex的初始化 (3)InterProcessMutex.…

《UE5_C++多人TPS完整教程》学习笔记35 ——《P36 武器类(Weapon Class)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P36 武器类(Weapon Class)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Stephen …

[密码学实战]Java实现国密TLSv1.3单向认证

一、代码运行结果 1.1 运行环境 1.2 运行结果 1.3 项目架构 二、TLS 协议基础与国密背景 2.1 TLS 协议的核心作用 TLS(Transport Layer Security) 是保障网络通信安全的加密协议,位于 TCP/IP 协议栈的应用层和传输层之间,提供: • 数据机密性:通过对称加密算法(如 AE…

最小栈 _ _

一:题目 二:思路 解释:一个栈名为st,其用来正常的出入栈,一个栈名为minst,其的栈顶元素一定是最小的元素 入栈:第一个元素,两个栈一起入,后面再入栈,只有入栈…

HTTPS加密原理详解

目录 HTTPS是什么 加密是什么 HTTPS的工作流程 1.使用对称加密 2.引入非对称加密 3.引入证书机制 客户端验证证书真伪的过程 签名的加密流程 整体工作流程 总结 HTTPS是什么 HTTPS协议也是一个应用程协议,是在HTTP的基础上加入了一个加密层,由…

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…

安装pyqt6出现的问题

安装PyQt6报错: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: C:\\Users\\xyj19\\AppData\\Local\\Temp\\tmp3xfmekh7 [end of output] note: This error originates from a subprocess, and is likely not a pr…

java调用c++

VScode 配置java 并且使用JNA调用c 动态库 安装 Java 开发环境 ​ 安装 JDK官网直接下载就好,推荐镜像下载 通过网盘分享的文件:jdk-8u144-windows-x64.exe​ 链接: https://pan.baidu.com/s/1Ov9bJkPNnOgcliBL-PSTFQ?pwdpg43 提取码: pg43 ​ 直接安…

gitlab+jenkins+harbor+k8s安装操作流程之Jenkins

准备环境 一台centos7系统 4C/8G/100G 如果是jenkins2.5以上版本需要centos8以上版本 JDK1.8编译安装(最新版本jdk需要18以上) MAVEN编译安装 GIT编译安装 JDK1.8步骤 tar -zxvf 解压 vim /etc/profile export JAVA_HOME/data/jdk1.8.0_111 export JRE_HOME$JAVA…