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,relationshipBase = declarative_base()class SchoolModel(Base):"""必须小写字母"""__tablename__ = 'school'#__table_args__ = {'schema': 'GEOVINDU'} # 11gschoolid = 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'}   # 11gteacherid = 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 TeacherEntityclass 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 inteachers]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.TeacherFirstNameteacher.TeacherLastName = teacher_entity.TeacherLastNameteacher.TeacherGender = teacher_entity.TeacherGenderteacher.TeacherTelNo = teacher_entity.TeacherTelNoteacher.TeacherSchoolId = teacher_entity.TeacherSchoolIdsession.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_sizequery = 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.rhkb.cn/news/29687.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考中级_【软件设计师】知识点之【数据库】

一、结构数据模型 结构数据模型是直接面向数据库的逻辑结构包括: 层次模型、网状模型、关系模型(主要学习)、面向对象模型层次模型: 是一个树结构一对多 网状模型: 是图结构多对多 关系模型 是一种二维表格结构 例如&…

【UCB CS 61B SP24】 Lecture 25 26 - Minimum Spanning Trees Directed Acyclic Graphs 学习笔记

本文首先介绍了图论中的另一个经典问题:最小生成树(MST),讲解并用 Java 实现了用于求解 MST 的两个经典算法 Prim 与 Kruskal;接着介绍并实现了有向无环图(DAG)与拓扑排序。 1. 最小生成树 1.…

Java源码:利用jdk的spi载入其他厂商Driver实现源码分析

Java源码:利用jdk的spi载入其他厂商Driver实现源码分析 前言:一、Java中的类加载器类型二、类加载器的作用时机三、类加载的过程四、引导类加载器:一、定义与职责二、实现方式三、加载过程与特性四、与其他类加载器的关系五、作用与意义 隐式…

可视化+图解:轻松搞定链表

链表(Linked list)是一种常用的数据结构,它由一系列节点组成,每个节点包含数据域和指针域。指针域存储了下一个节点的地址,从而建立起各节点之间的线性关系。 1、链表节点 1.1 节点构成 链表节点如下图所示&#xff…

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…

C# 在Excel中插入和操作切片器-详解

目录 使用工具 C# 在Excel中插入切片器 插入切片器到透视表 插入切片器到表格 C# 在Excel中修改切片器 C# 删除Excel中的切片器 切片器(Slicer)是Excel中的一个强大工具,它提供了直观且交互式的方式来过滤数据。通过切片器,…

【Python修仙编程】(二) Python3灵源初探(7)

字典的修炼——修仙者的法宝库 师傅玄天真人在他面前摊开一本泛黄的法典,上面写着:“字典是修仙者存储法宝的仓库,能让你快速找到需要的宝贝。” “师傅,字典是啥玩意儿?”林羽挠挠头,一脸懵逼。 “字典…

SyntaxError: Illegal return statement

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249, webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间,下面介绍下如何修改配置这个区间。 从页面上修改这个区间,端口区间尽量设置大…

饮食 “巧调理”,缓解手抖有妙方

手抖,这一常见症状背后可能潜藏多种原因,无论是生理性紧张所致,还是病理性疾病引发,合理饮食都对缓解症状有积极意义。健康饮食能够为身体提供必要营养,助力神经系统稳定,从而在一定程度上改善手抖状况。 在…

利用 requestrepo 工具验证 XML外部实体注入漏洞

1. 前言 在数字化浪潮席卷的当下,网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时,也可能暗藏安全风险。XXE(XML外部实体)漏洞作为其中的典型代表,攻击者一旦利用它,便能窃取敏感信息、掌控服务…

考前冲刺,消防设施操作员考试最后一击

考前冲刺,消防设施操作员考试最后一击 考前冲刺阶段至关重要。首先要回归教材,快速浏览重点知识点,强化记忆。同时,对之前做过的错题进行集中复习,分析错误原因,避免在考试中再次犯错。进行全真模拟考试&a…

【javaEE】多线程(基础)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

【江科大STM32】TIM输入捕获模式PWMI模式测频率

一、输入捕获测频率 接线图: 测信号的输入引脚为PA6,信号从PA6进来,待测的PWM信号也是STM32自己生成的,输出引脚是PA0,所以接线这里直接用一根线将PA0引到PA6就可以了。 如果有信号发生器的话,也可以设置成…

第10章 metasploit(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第10章开始学习利用metasploit渗透测试工具去打metasploit2虚拟机,本文我演示了metasploit端口扫描和…

AI绘画软件Stable Diffusion详解教程(8):图生图进阶篇(手绘修正)

本篇介绍一下图生图的涂鸦绘制模式。 效果和上一篇改变风格雷同,但是可以通过涂鸦的方式,在重绘时对涂鸦的部分进行替换,替换部分的图像参照正向提示词来生成。 一、进入图生图标签页 按箭头指示处,打开涂鸦绘制工作区。 二、涂…

mapbox高阶,结合threejs(threebox)添加三维球体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox Sphere静态对象二、🍀使用t…

从零开始用HTML、CSS和JavaScript制作贪吃蛇网页小游戏

〇、前言 贪吃蛇是一款经典的休闲游戏,在诺基亚手机时代风靡全球。 作为编程入门者,实现一个贪吃蛇游戏是学习Web前端技术的绝佳练习。 名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN…

计算机网络-服务器模型

一.服务器模型 1.支持多客户端访问 //单循环服务器 socket bind listen while(1) { accept while(1) { recv/send } } close 注:该模式remvform为阻塞态,服务器将等待接收数据 2..支持多客户端同时访问 (并发能力) socket…

aardio - 虚表 —— 两个虚表之间互相拖动交换数据

插入到虚表末尾的方法: import win.ui; import godking.vlistEx; /*DSG{{*/ mainForm win.form(text"vlistEx - table adapter";right849;bottom578;border"thin") mainForm.add( radiobutton{cls"radiobutton";text"移动&qu…