首页 > 数据库 >flask之sqlalchemy ORM 一对多、多对多

flask之sqlalchemy ORM 一对多、多对多

时间:2025-01-15 16:11:19浏览次数:1  
标签:__ sqlalchemy flask repr Person ORM str Hobby hobby

一、一对多关系

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

1、models

# 1 导入一些模块
import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, \
    relationship  # 新的变成它,老的会有  from sqlalchemy.ext.declarative import declarative_base  Warning

from 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.caption

class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    name = Column(String(32), index=True, nullable=True)
    # hobby指的是tablename而不是类名,uselist=False
    hobby_id = Column(Integer, ForeignKey("hobby.id"))  # 关联字段写在多的一方

    # 跟数据库无关,不会新增字段,只用于快速链表操作
    # 类名,backref用于反向查询
    hobby = relationship('Hobby', backref='pers')  # 等同于django中的relate_name,反向查询替换表名小写的

    def __str__(self):
        return self.name

    def __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 对象

  

 

二、多对多关系

标签:__,sqlalchemy,flask,repr,Person,ORM,str,Hobby,hobby
From: https://www.cnblogs.com/dgp-zjz/p/18673257

相关文章

  • 2025年flask电子病历管理系统 程序+论文 可用于计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展,电子病历管理系统在医疗领域的应用日益广泛。关于电子病历管理系统的研究,现有文献主要集中在系统的架构设计、数据......
  • 2025年flask电影购票系统 程序+论文 可用于计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着互联网的快速发展和人们生活节奏的加快,线上电影购票已成为人们观影的主要方式之一。关于电影购票系统的研究,现有文献主要集中在系统的......
  • 大模型好书推荐 | Transformer 和扩散模型的生成式 AI 实用指南(文末免费下载PDF)
    《Transformer和扩散模型的生成式AI实用指南》是一本关于生成式人工智能的技术指南,特别关注了Transformer和扩散模型在AI领域的应用。这本大模型书籍已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】这本书的内容主要分为以下......
  • Python+Django的框架药品购买系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的框架药品购买系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql......
  • Python+Django的智能宾馆预定系统(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的智能宾馆预定系统(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数......
  • 小众降维!POD-Transformer多变量回归预测(Matlab)
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现POD-Transformer多变量回归预测,本征正交分解数据降维融合Transformer多变量回归预测,使用SVD进行POD分解(本征正交分解);2.运行环境Matlab2023b;3.输入多个特征,输出单个变量,多变量回归预测......
  • flask框架团购轻量级网站毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于团购轻量级网站的研究,现有研究主要以大型团购平台或综合电商平台中的团购板块为主,专门针对轻量级团购网站的研究较少。在国内外,大......
  • ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision(V
    ViLT:Vision-and-LanguageTransformerWithoutConvolutionorRegionSupervision(ViLT无卷积或区域监督的语言视觉转换器)1.摘要大概内容就是视觉与语言预训练(VLP)在各种视觉与语言联合下游任务重表现很牛逼,但是目前他们大部分都以来图像特征提取过程(比如区域监督和卷积结......
  • flask框架实验报告提交评阅系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着教育信息化的不断发展,各类教学管理系统的需求日益增长。关于教学管理系统的研究,现有研究主要以综合教学管理平台为主,专门针对实验......
  • flask框架水务报修处理系统毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景在当今社会,随着城市化进程的加速,水务系统的正常运行对居民生活和城市发展的重要性不言而喻。关于水务管理方面的研究,现有研究主要以水......