【SQLALCHEMY】表关联关系

【SQLALCHEMY】表关联关系

1、一对一或一对多

实例代码

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    cc = relationship("Child", uselist=False, back_populates="pp")


class Child(db.Model):
    __tablename__ = 'child'
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
    pp = relationship("Parent", back_populates="cc")

重点一

parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))

这行脚本会指定建立一个外键,注意ForeginKey的参数是<表名>.<键名>,而不是<类名>.<字段名>

重点二
注意下图的对应关系,使用relationship指定两表见的关系时映射关系如下。

  • relationship的第一个参数是类名
  • back_populates参数的值是有对应关系的
  • 如果要一对一映射而不是一对多,只需要在父表的relationship指定参数uselist的值为False
    一对一、一对多关系重点

2、多对多

association_table = Table('association', db.Model.metadata, db.Column('left_id', db.Integer, ForeignKey('left.id')),
                          db.Column('right_id', db.Integer, ForeignKey('right.id'))
                          )


class Parent(db.Model):
    __tablename__ = 'left'
    id = db.Column(db.Integer, primary_key=True)
    children = relationship(
        "Child",
        secondary=association_table,
        back_populates="parents")


class Child(db.Model):
    __tablename__ = 'right'
    id = db.Column(db.Integer, primary_key=True)
    parents = relationship(
        "Parent",
        secondary=association_table,
        back_populates="children")
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy中,跨查询可以使用join()函数实现。假设我们有两个,一个是User,一个是Order,它们之间存在外键关系,我们要查询所有用户及其关联的订单信息,可以按以下步骤进行操作: 1. 定义结构 ```python from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) orders = relationship("Order", back_populates="user") class Order(Base): __tablename__ = 'orders' id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('users.id')) amount = Column(Integer) user = relationship("User", back_populates="orders") ``` 2. 创建Session并查询数据 ```python from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create_engine('sqlite:///example.db') Session = sessionmaker(bind=engine) session = Session() # 使用join查询所有用户及其关联的订单信息 query = session.query(User, Order).join(Order) # 打印查询结果 for user, order in query.all(): print(f"User: {user.name}, Order: {order.amount}") ``` 在这个例子中,我们使用join()函数将User和Order连接起来,并且通过relationship定义了之间的关系。在查询时,我们使用session.query()函数查询所有用户及其关联的订单信息,并通过join()函数将两个连接起来。最后,我们通过for循环遍历查询结果并打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值