表关系
一对一、一对多、多对多关系
一、外键
SQLAlchemy中可以使用外键。通过ForeignKey类来实现,并且可以指定表的外键约束。代码如下:
class Article(Base): __tablename__ = 'article' id = Column(Integer,primary_key=True,autoincrement=True) title = Column(String(50),nullable=False) content = Column(Text,nullable=False) uid = Column(Integer,ForeignKey('user.id')) def __repr__(self): return "<Article(title:%s)>" % self.title class User(Base): __tablename__ = 'user' id = Column(Integer,primary_key=True,autoincrement=True) username = Column(String(50),nullable=False)
其中外键约束有:
1、RESTRICT:父表数据被删除,会阻止删除。默认就是这一项。
2、NO ACTION:在MySQL中,同RESTRICT。
3、CASCADE:级联删除。
4、SET NULL:父表数据被删除,子表数据会设置为NULL。
未通过relationship绑定关系,直接使用外键
使用relationship实现表关系
backref : 反向引用,第二个参数:代表对方访问我的时候的字段名称
截图中的articles是因为 通过用户可以拿到许多文章 即 一对多关系。
同时注意使用relationship的时候,这个表已经设置好了外键的。
写一个函数进行实验上述代码:即把user直接通过author绑定了关系。
使用反向引用代码示例:在这里增加了两篇文章,但是作者是同一个人,所以可以通过user.articles查看其下有多少篇文章,这就是为什么articles要加s。