relationship函数是sqlalchemy对关系之间提供的一种便利的调用方式, backref参数则对关系提供反向引用的声明

1 背景

如没有relationship,我们只能像下面这样调用关系数据

 
 

如果在User中使用relationship定义addresses属性的话,

addresses = relationship('Address')
则我们可以直接在User对象中通过addresses属性获得指定用户的所有地址

2 backref属性


大致原理应该就是sqlalchemy在运行时对Address对象动态的设置了一个指向所属User对象的属性,这样就能在实际开发中使逻辑关系更加清晰,代码更加简洁了

2 例子

>>> from sqlalchemy import Column, Integer, String
>>> class User(Base):
... __tablename__ = 'users'
...
... id = Column(Integer, primary_key=True)
... name = Column(String)
... fullname = Column(String)
... password = Column(String)
...
... def __repr__(self):
... return "<User(name='%s', fullname='%s', password='%s')>" % ( self.name, self.fullname, self.password)
>>> from sqlalchemy import ForeignKey
>>> from sqlalchemy.orm import relationship, backref >>> class Address(Base):
... __tablename__ = 'addresses'
... id = Column(Integer, primary_key=True)
... email_address = Column(String, nullable=False)
... user_id = Column(Integer, ForeignKey('users.id'))
...
... user = relationship("User", backref=backref('addresses', order_by=id))
...
... def __repr__(self):
... return "<Address(email_address='%s')>" % self.email_address
ForeignKey表示,Addresses.user_id列的值应该等于users.id列中的值,即,users的主键
relationship(), 它告诉 ORM ,Address类本身应该使用属性Address.user链接到User类
relationship()的参数中有一个称为backref()的relationship()的子函数,反向提供详细的信息, 即在users中添加User对应的Address对象的集合,保存在User.addresses中
两个互补关系, Address.userUser.addresses被称为一个双向关系,并且这是SQLAlchemy ORM的一个关键特性

最新文章

  1. Entity Framework Code First Migrations--EF 的数据迁移
  2. CLR via C#(09)-扩展方法
  3. 【转载】ANSYS的APDL与C语言混合编程(实例)
  4. php 获取代码执行时间和消耗的内存
  5. Redis教程(十):持久化详解
  6. JQuery Delay Hover效果
  7. mybatis中为sql中传值#{}和${}的区别
  8. 我cnblogs的主题
  9. php转义和去掉html、php标签函数
  10. margin系列之内秀篇
  11. 【转并修改】VS2013 MVC Web项目使用内置的IISExpress支持局域网内部机器(手机、PC)访问、调试
  12. Oracle 监听配置详解(转载)
  13. Spring中的Service/DAO/DTO
  14. Task.Run与Task.Factory.StartNew的区别
  15. idea报错:Invalid bound statement (not found)
  16. arr.sort()
  17. CentOS 7 用firewall-cmd来开放端口
  18. MongoDB索引相关文章-摘自网络
  19. Linux基础网络设置
  20. 【CTR】各公司方法

热门文章

  1. ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图模板页
  2. 搭建nginx静态资源站
  3. cli中webpack的配置详解
  4. JAVA静态方法是否可以被继承?
  5. nc 命令
  6. 跟着minium官网介绍学习minium-----(二)
  7. 【问题】为啥WMWare Workstation里面虚拟机的网关默认是NAT网关
  8. RedHat Enterprise Linux 5 配置Samba服务器
  9. 什么是调整后的R方
  10. 基于 C++ 的脚本语言 cpps 脚本