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

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.kler.cn/a/515101.html

相关文章:

  • Spring MVC和Spring WebFlux的区别
  • 16_动态提示窗口_协程延时
  • ubuntu24 springboot jar设置宕机重启
  • element el-table合并单元格
  • 解决后端接口返回Long类型参数导致的精度丢失问题
  • 数据结构-二叉树
  • IM系统设计
  • 4.JoranConfigurator解析logbak.xml
  • IDEA中将String类型转json格式
  • 学python的第四天:输入(重制版)
  • 如何使用Python脚本将本地项目上传到 GitHub
  • C语言练习(19)
  • 学习笔记——动态规划
  • Math Reference Notes: 反函数
  • 第一讲 方程组的几何解释——以列向量线性组合的角度看方程组
  • NIO | 什么是Java中的NIO —— 结合业务场景理解 NIO (一)
  • 【Day24 LeetCode】贪心Ⅱ
  • 数据分库分表和迁移方案
  • 利用ML.NET精准提取人名
  • PyQt5之QCalendarWidget
  • python-leetcode-逆波兰表达式求值
  • jenkins平台使用Login Theme、Customizable Header插件定制修改登陆页图片文字及首页标题
  • 【Let‘s do第四期】DIY液体流量检测仪
  • Apache Hive3定位表并更改其位置
  • 【计算机网络】NAT应用
  • 如何保护 Flask API 的安全性?