flask之sqlalchemy ORM 一对多、多对多

news/2025/1/15 16:05:06/文章来源:https://www.cnblogs.com/dgp-zjz/p/18673257

一、一对多关系

爱好和人的关系,一个爱好可以对应多个人

1、models

# 1 导入一些模块
import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, \relationship  # 新的变成它,老的会有  from sqlalchemy.ext.declarative import declarative_base  Warningfrom sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index# 2 得到所有表模型需要继承 基类
Base = declarative_base()class Hobby(Base):__tablename__ = 'hobby'id = Column(Integer, primary_key=True)caption = Column(String(50), default='篮球')def __str__(self):return self.captionclass Person(Base):__tablename__ = 'person'id = Column(Integer, primary_key=True)name = Column(String(32), index=True, nullable=True)# hobby指的是tablename而不是类名,uselist=Falsehobby_id = Column(Integer, ForeignKey("hobby.id"))  # 关联字段写在多的一方# 跟数据库无关,不会新增字段,只用于快速链表操作# 类名,backref用于反向查询hobby = relationship('Hobby', backref='pers')  # 等同于django中的relate_name,反向查询替换表名小写的def __str__(self):return self.namedef __repr__(self):return self.name

补充:

1.1 __str__ 和 __repr__ 方法

__str__ 作用:

  • __str__ 方法用于定义对象的“用户友好”字符串表示形式。

  • 当你使用 print(obj) 或 str(obj) 时,Python 会调用 __str__ 方法来获取对象的字符串表示。

  • 这个方法通常用于向用户展示对象的描述性信息。

user = Users(name="Alice")
print(user)  # 输出: Alice

__repr__作用:

  • __repr__ 方法用于定义对象的“开发者友好”字符串表示形式。

  • 当你直接在交互式环境中输入对象名称(如 obj)或使用 repr(obj) 时,Python 会调用 __repr__ 方法。

  • 这个方法通常用于调试和开发,返回的字符串应该尽可能明确地描述对象的状态。

  • 如果 __str__ 方法未定义,__repr__ 会作为 __str__ 的备用方法。

def __repr__(self):return f"<User(id={self.id}, name={self.name}, email={self.email})>"

1.2、 relationship

 hobby = relationship('Hobby', backref='pers') 

  • 'Hobby'

    • 指定关联的模型类为 Hobby

  • backref='pers'

    • 在 Hobby 模型中创建一个 pers 属性,用于反向查询与该 Hobby 关联的所有 Person 对象。

    • 例如,可以通过 hobby.pers 获取所有喜欢该 Hobby 的 Person 对象。

正向查询

通过 Person 对象访问关联的 Hobby 对象:

person = session.query(Person).all()
print(person[1].name)
print(person[1].hobby)## 结果
dapeng
乒乓球

反向查询

通过 Hobby 对象访问关联的 Person 对象:

hobby = session.query(Hobby).all()
print(hobby[1].pers)  # 获取所有喜欢该 Hobby 的 Person 对象

  

 

二、多对多关系

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

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

相关文章

为什么说开展信创数据库势在必行

我国发展信创数据库的原因 - 保障信息安全:数据库存储着大量关键数据,如政府机密、金融交易记录、企业商业机密等。国外数据库可能存在安全漏洞或被植入后门,对国家信息安全构成威胁。发展信创数据库可实现自主可控,从根源上保障数据安全,降低安全风险。 - 减少技术依赖:…

20221320冯泰瑞《密码系统设计》第十二周

20221320冯泰瑞《密码系统设计》第十二周 学习内容Head First C 嗨翻C语言第12章 课程 mindmapAI 对学习内容的总结 要求让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材总结 《Head First C》第十二章的内容主要介绍了如何在C语言中…

20221320冯泰瑞《密码系统设计》第十一周

20221320冯泰瑞《密码系统设计》第十一周 学习内容Head First C 嗨翻C语言第11章 课程 mindmapAI 对学习内容的总结 要求让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材总结 《Head First C》第十一章的内容主要介绍了C语言中网络编…

深入理解第一范式(1NF):数据库设计中的基础与实践

title: 深入理解第一范式(1NF):数据库设计中的基础与实践 date: 2025/1/15 updated: 2025/1/15 author: cmdragon excerpt: 在关系型数据库设计中,规范化是确保数据一致性和减少冗余的重要步骤。第一范式(1NF)作为规范化的基础,要求每个表都应遵循数据的原子性及唯一性…

GaussDB技术解读——GaussDB架构介绍之集群管理层(CM)关键技术方案

GaussDB Kernel V5 集群管理层关键模块如下。图4 集群管理层组件设计图 CM 组件提供了四种服务 CM Agent, CM Server, OM Monitor, cm_ctl,与各类实例服务组件(CN, DN, GTM 等)一起构成了整个数据库集群系统。 cm_ctl 通过命令行执行集群的启动、停止、状态查询、主备倒换、…

GaussDB技术解读——GaussDB架构介绍之OM运维管理关键技术方案

​ GaussDB Kernel V5 OM运维管理关键模块如下。OM 运维主要功能有: 安装 升级 节点替换 扩容、缩容 自动告警 巡检 备份恢复、容灾 日志分析系统 在华为云的部署模式下,OM相关组件部署示意图如下: 图7 华为云OM运维管理 用户登录华为云Console,访问GaussDB Kernel V5的管控…

通义发布语音模型 MinMo:全双工、多口音;MiniCPM-o :端侧 GPT-4o 级视觉、语音、多模态实时流式大模型

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

部署 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化

一、安装部署 1.安装 python3.11 或以上版本2.安装browser-use pip install browser-use3.安装 Playwright playwright install4.安装项目依赖 pip install langchain-google-genai==2.0.8 pip install pyperclip==1.9.0 pip install gradio==5.9.1 pip install langchain-olla…

Day_01

学习MarkDownMarkDown学习 标题: 二级标题 三级标题 字体 hello world hello world hello world hello world hello world 引用选择狂神说Java,走向人生巅峰分割线图片超链接 点击跳转到B站 列表A B CA B C表格名字 性别 生日张三 男 2000.1.4代码 public static

高效团队如何选择问题管理工具?六款推荐与理由

1. 板栗看板(Banli Kanban) 推荐理由: 板栗看板是由重庆赛迪信息公司研发的在线协同文档编辑与项目管理工具,专为中国企业的团队协作需求量身打造。核心功能:板栗看板集任务管理、实时协作编辑、进度追踪于一体,通过简洁直观的界面帮助团队掌握开发节奏。适用场景:适合中…

任务分配与信息共享:跨职能团队协作的利器

一、跨职能团队协作的挑战 沟通障碍与信息不对称 跨职能团队通常由来自不同部门的成员组成,各个部门之间存在语言、目标和工作方式上的差异。例如,研发团队更加注重技术细节和功能实现,而市场和销售团队则关注产品的市场定位、推广策略和客户需求。这种背景差异往往会导致沟…

告别付费拍证件照!NAS 基于Docker部署免费证件照生成工具

你在生活中有没有遇到过急需证件照的场景?在某些考试前发现证件照还没准备好;求职面试时,也需要附上职业证件照,生活中还有很多需要证件照的场景。 本文章利用NAS基于Docker部署一款证件照自动生成的工具—HivisionIDPhotos。 利用‌HivisionIDPhotos‌,通过一张生活照片,…