Python Flask框架学习笔记14

Posted CCH2023

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Flask框架学习笔记14相关的知识,希望对你有一定的参考价值。

数据库一对一的关系:

实现一对一的关系,只需要在一对多的基础上,将“多”的那一端设置为“一”即可。

书上举得例子是:用户拓展表。

在公司业务增长的情况下,需要存储用户的许多属性,但是有些属性是不常用的,为了提高网站的响应速度,我们把不常用的属性放到拓展表中,只有需要的时候才访问。那么这个例子就是一对一的关系。一个用户只有一个拓展数据,一个拓展数据只能属于一个用户。

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)

    extension = db.relationship("UserExtension", back_populates="user", uselist=False)


class UserExtension(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    school = db.Column(db.String(100))
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), unique=True)
    user = db.relationship("User", back_populates="extension")

代码说明:

1)该例子中,UserExtension类中,没有表__tablename__的配置项。

2)user_id 通过db.ForeignKey引用了之前创建表的user的id字段。

3)db.relationship来引用外键所指向的那个ORM模型。

4)双方都能通过属性直接访问到对方。

5)其中增加了配置:unique=True, uselist=False。就是一对一。

在看多对多的关系:

多对多的关系在数据库层面是需要一张中间表来表现的。

比较典型的例子是:文章和标签:一篇文章可以添加多个标签,一个标签可以被多篇文档添加。

article_tag_table = db.Table(
    "article_tag_table",
    db.Column("article_id",db.Integer,db.ForeignKey("article.id"),primary_key=True),
    db.Column("tag_id",db.Integer,db.ForeignKey("tag.id"),primary_key=True)
)


class Article(db.Model):
    __tablename__ = "article"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(200),nullable=False)
    content = db.Column(db.Text,nullable=False)

    author_id = db.Column(db.Integer,db.ForeignKey("user.id"))
    author = db.relationship("User",backref="articles")

    tags = db.relationship("Tag",secondary=article_tag_table,back_populates="articles")


class Tag(db.Model):
    __tablename__ = "tag"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100))

    articles = db.relationship("Article",secondary=article_tag_table,back_populates="tags")

@app.route('/many2many')
def many2many():
    article1 = Article(title="11",content="aa")
    article2 = Article(title="22", content="bb")

    tag1 = Tag(name="python")
    tag2 = Tag(name="flask")

    article1.tags.append(tag1)
    article1.tags.append(tag2)

    article2.tags.append(tag1)
    article2.tags.append(tag2)

    db.session.add_all([article1,article2])
    db.session.commit()
    return "多对多数据添加成功!"

在这个过程中,还遇到了这个问题;

把数据库中的表都进行了删除,发现是正常的了。

 

级联操作:

级联操作的概念:

在操作某个对象的时候,相关联的对象也会进行对应的操作。

在数据库层面的级联操作包括级联删除、级联更新等。

那有时间,可以把这个地方,做专门一个主题进行学习。

[ Flask ] 轻量级Python Web框架 学习笔记


点击 阅读原文 查看笔记


以上是关于Python Flask框架学习笔记14的主要内容,如果未能解决你的问题,请参考以下文章

[ Flask ] 轻量级Python Web框架 学习笔记

Flask 学习笔记

flask学习笔记1

千锋Flask学习笔记

千锋Flask学习笔记

千锋Flask学习笔记