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

5.SQLAlchemy对两张有关联关系表查询

问题

例如,一个用户可以有多个收获地址。

定义表如下:

用户表

 地址表

一般情况,我们会先查询用户表,拿到用户id后,再到地址表中查询关联的地址数据。这样就要执行两次查询。

仅仅为了方便查询,需要一些属性便利的去查询数据,但是这些属性不能出现在数据库中。

模型之间的关联

from exts import db# 数据库模块需要继承db.Model
class User(db.Model):# 定义表名__tablename__ = "user"# 定义字段id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(50), unique=True)password = db.Column(db.String(100))info = db.Column(db.JSON)# 表示和地址模型进行关联,增加了一个addresses属性(这个属性不会再数据库表中对应出现)# backref='user'表示是Address要使用的一个属性,只是反向定义到了这里addresses = db.relationship('Address', backref='user')# 打印一个可读的字符串def __repr__(self):return '<User: %s %s>' % (self.username, self.id)class Address(db.Model):# 定义表名__tablename__ = "address"# 定义字段id = db.Column(db.Integer, primary_key=True)user_id = db.Column(db.Integer, db.ForeignKey('user.id'))city = db.Column(db.String(10))# Address希望有user属性,但是这个属性的定义需要在另一个模型中定义def __repr__(self):return '<Address: %s %s>' % (self.id, self.city)
@user2.route("/select_user", methods=['GET'])
def select_user():get_user = db.session.query(User).filter(User.id == 2).first()if get_user:print(get_user.addresses)return "select success"

@user2.route("/select_address", methods=['GET'])
def select_address():all_address = db.session.query(Address).filter(Address.user_id == 2).all()for addr in all_address:print(addr.user)return "select success"

 注意:这些关联数据可以成功查询的前提是基于外键关系,数据库中的表可以不建立关键,但是Python代码的Model之间要定义好关系,比如:

user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
http://www.lryc.cn/news/524896.html

相关文章:

  • 2.2.1 语句结构
  • 安当二代TDE透明加密技术与SMS凭据管理系统相结合的数据库安全解决方案
  • es的date类型字段按照原生格式进行分组聚合
  • 高频次UDP 小包丢包分析
  • 科目四考试内容
  • 2015 年 4 月多省(区、市)公务员录用考试 《申论》真题详解
  • 四、CSS效果
  • 全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析
  • 图论 八字码
  • OSI5GWIFI自组网协议层次对比
  • 北理新源监控平台都管理哪些数据
  • WPS不登录无法使用基本功能的解决方案
  • 车载软件架构 --- CP和AP作为中央计算平台的软件架构双核心
  • 【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构
  • 【深度学习基础】多层感知机 | 权重衰减
  • 修改word的作者 最后一次保存者 总编辑时间 创建时间 最后一次保存的日期
  • 青少年编程与数学 02-007 PostgreSQL数据库应用 15课题、备份与还原
  • Flutter:自定义Tab切换,订单列表页tab,tab吸顶
  • SAS-proc sgplot绘图
  • 怎么使用python 调用高德地图api查询位置和导航?
  • pikachu靶场-敏感信息泄露概述
  • 使用ssh推送项目到github
  • SAP MRP运行出现例外消息怎么处理?例外消息的优先级、案例分享
  • 002-SpringBoot整合AI(Alibaba)
  • Java中如何安全地停止线程?
  • Apache Tomcat文件包含漏洞复现(详细教程)
  • 个人学习 - 什么是Vim?
  • Flink Gauss CDC:深度剖析存量与增量同步的创新设计
  • docker 部署.netcore应用优势在什么地方?
  • AIP-126 枚举