Flask-如何理解创建数据模型中外键关联

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask-如何理解创建数据模型中外键关联相关的知识,希望对你有一定的参考价值。

参考技术A

之前学习flask创建数据模型的时候,经常会遇到relationship,外键关联, backref等字眼,由于对这方面知识不是特别熟悉, 所以极大的加深了理解难度, 虽然网上也有相关的表关联的案例,但是对于理解方面没有做过多的说明, 在此,通过学习按照自己的理解进行总结,也希望自己有所加深理解,通过也可以给跟我一样脑袋回路长的朋友一点方向

模型创建
对于日常Flask建表,都是通过建立相应的模型类,进行表操作,见eg:

上面就是一个普通的见表操作, tablename 是表示当前表名称,id, name为表字段,至于Integer, String则是对应的属性
对于这个大家很好理解

外键关联
可是我们经常看到的别人使用的外键关联是如何在模型类中体现的呢?

对于一般的关联, 可以通过如上所示中的ForeignKey和relationship来进行处理
那么这两个如何方便理解呢?

总的来说, relationship这个聚合了两个功能

深入理解Flask(2.使用 SQLAlchemy 创建数据模型)

Flask 是一个基于 Python 的 Web 框架,它的设计目的是提供 Web 开发所需要的最小功能子集。它与其他框架的不同之处在于:它没有绑定诸如数据库查询或者表单处理等功能库,以及它们所组成的整个生态系统。它倾向于对这些功能的实现方式不做任何限定。




模型(models)是对数据抽象并提供通用访问接口的一种方式。

为了基于数据库抽象出数据模型,我们要用一个叫做 SQLAlchemy 的 Python包。

为了把 SQLAlchemy 绑定到我们的应用上下文中,我们可以使用 Flask SQLAlchemy。




一、设置 SQLAlchemy


    默认使用的数据库是 SQLite ,如果需要其他数据库,请自行安装数据库。

    1. Python 安装包

        使用 pip 安装 Flask SQLAlchemy:$pip install flask-sqlalchemy

        如果是其他数据库,需要自行安装一些特定的包作为 SQLAlchemy 与你所选的数据库之间的连接器。

    2.Flask SQLAlchemy

        SQLAlchemy 通过一个特殊的数据库URI 来创建数据库连接,可上网查找,之后我们要将该 URI 添加到 config.py 文件中的 DevConfig 中去(也就是对应的配置文件中的对应函数中)。




二、我们的第1个数据模型


    1.创建数据模型

        首先,要在主程序(main.py)文件中将我们的 app 对象传给 SQLAlchemy, 将 SQLAlchemy 初始化:

        然后在该程序中创建一个模型(例如User),它会跟相应的 user 表进行交互。

        最后,创建 User 表:

            先更新 manage.py,在没新增一个数据模型时将该模型导入并添加到返回的 dict 中。

            然后通过运行命令行来创建表单:

                $ python manage.py shell

                >>> db.create_all()


    2.CRUD:数据存储策略中的4个基本功能类型:添加、读取、修改和删除。


    3.数据模型之间的关联


    4. SQLAlchemy 会话对象的方便之处

        会话(session)可以被简单地描述为用来跟踪数据模型变化的对象,它还可以根据我们的指令将这些变化提交进数据库。同时,会话可以用来控制事物,可以避免一些常见的错误(如在保存外键时指向了不存在的对象及自动记录数据的跟跌。)


    5.使用 Alembic 进行数据库迁移

        Alembic是一个可以根据我们的SQLAlchemy模型的变换自动创建数据库迁移记录的工具,但是我们不会直接使用Alembic,而是使用 Flask-Migrate。

        $ pip install Flask-Migrate

        之后的操作可上网查询。

以上是关于Flask-如何理解创建数据模型中外键关联的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Flask(2.使用 SQLAlchemy 创建数据模型)

根据同一模型中的另一个外键动态限制 Django 模型中外键的​​选择

sql中外键怎么写?

Flask appbuilder如何使用现有模型创建新模型并保存到数据库中

如何限制 Django ORM 中外键关系的数量?

Flask--(一对多)模型渲染表单数据