Flask学习与项目实战6:一对多关系实现

表关系:

一对一、一对多、多对多关系

一、外键

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。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51484460/article/details/122747769