欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

flask学习之数据表对应关系:一对多

程序员文章站 2022-06-26 17:42:13
表对应关系存在三种 一对一 一对多 多对多一对多:假设要添加一个功能,保存用户的邮箱账号,并且邮箱账号有多个,这时候就必须创建一个新的表,用于存储用户的邮箱,通过user.id来作为外键进行引用在本例子中,使用的是一个作者与文章的实例,一个作者可以有多篇文章,这就是个一对多,但是每篇文章对应的是一个作者。在这里要从一篇文章找文章的作者,找到的是一个确定的值,如果从一个作者找到其文章,找到的是一个可迭代对象,因为是存在一对多,查到的是1个可迭代的。实现方式:1.引入relationship...

表对应关系存在三种 一对一 一对多 多对多
一对多:假设要添加一个功能,保存用户的邮箱账号,并且邮箱账号有多个,这时候就必须创建一个新的表,用于存储用户的邮箱,通过user.id来作为外键进行引用
在本例子中,使用的是一个作者与文章的实例,一个作者可以有多篇文章,这就是个一对多,但是每篇文章对应的是一个作者。

  • 在这里要从一篇文章找文章的作者,找到的是一个确定的值,如果从一个作者找到其文章,找到的是一个可迭代对象,因为是存在一对多,查到的是1个可迭代的。
    实现方式:
    1.引入relationship
from sqlchemy.orm import relationship

2.在两个表之中定义relationship

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(50))

    # 添加反向查询的属性
    # article = relationship('Article', backref='article')
    article = relationship('Article')

    def __str__(self):
        return 'User(name:{})'.format(self.name)


class Article(Base):
    __tablename__ = 'article'

    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50))
    content = Column(TEXT, nullable=False)
    uid = Column(Integer, ForeignKey('user.id', ondelete='RESTRICT'))

    author = relationship('User')

    def __str__(self):
        return 'Article(title:{})'.format(self.title)

注:含有外键定义的属于多,
这个查询是建立在外键的基础上的,如果不添加外键,是不能实现这里的一对多的。

sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship User.article - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

如果将外键去除,则需要添加反向查询的属性

本文地址:https://blog.csdn.net/LCY133/article/details/109625754

相关标签: 数据库 flask