Flask学习与项目实战7:一对一关系、管理表的映射与ORM、项目重构

简介: 上篇文章中提到了一对多关系, 也就是一个user对应多篇文章,这是一对多的关系,那么如何设置一对一的关系呢。

上篇文章中提到了一对多关系, 也就是一个user对应多篇文章,这是一对多的关系,那么如何设置一对一的关系呢。

一对一关系

下面还是一对多的关系。

通过更改代码如下即可设置一对一关系。

迁移工具 Flask-Migrate插件

如果上述的模型想要映射到数据库当中,需要进行 db.create_all()函数来进行操作。但是存在一个弊端,如果模型中新增删除了一个字段等,就不能更新处理,即create_all不会处理的。(可能需要重新跑一遍代码?)

首先导入migrate即可,那就是migrate = Migrate(app,db)

首先初始化一个仓库。

然后是第二行命令,这样就会生成一个迁移脚本。

接下来就可以迁移脚本映射到表当中。

初始化动作只需要做一次,只需要最开始做一次就可以了。如果增加了一个新的字段,那么回控制台终端当中,执行 flask db migrate -m “add xxx” 就可以生成了新的迁移脚本了,然后flask db upgrade就可以了。


只需要专心在flask代码层面进行操作就可以了,然后在控制台进行命令控制就很简单了。

项目重构


配置重构

模型、配置都写在一个文件,会比较乱。所以需要进行重构。

在原app文件中将配置文件放在config中,然后在app中导入即可,app.config.from_object(config) 就可以了 。

模型重构

把各种db模型都放在models中。在app中导入刚才移出去的模型。

即: from models import Article,User,UserExtension。

这个时候会报错,因为models中使用了from app import db文件。


一般最开始程序刚运行的时候会最先运行app文件,然后 从app代码的第一行代码执行,结果到from models的时候找到了models文件,但是models又是从app中导入db,所以会造成循环引用。

所以可以把db放在新的.py中。(后续再绑定app)

这个时候model就可以解决问题了。

然后从app中导入db,from exts import db,接着在app中绑定app。

所以现在的关系是这样的:大家都去exts引用导入db。这个时候不存在循环引用了。

相关文章
|
缓存 前端开发 JavaScript
flask各种版本的项目,终端命令运行方式的实现
flask各种版本的项目,终端命令运行方式的实现
948 4
|
11月前
|
人工智能 Linux C++
即开即用,封装 Flask 项目为 exe 文件实操步骤
即开即用,封装 Flask 项目为 exe 文件实操步骤
|
API 数据库 Python
二、学习 Flask之二
二、学习 Flask之二
259 0
|
安全 前端开发 API
震惊!掌握Django/Flask后,我竟然轻松征服了所有Web项目难题!
【7月更文挑战第15天】Python Web开发中,Django以其全面功能见长,如ORM、模板引擎,助你驾驭复杂需求;Flask则以轻量灵活取胜,适合快速迭代。两者结合使用,无论是数据库操作、用户认证还是API开发,都能让你应对Web挑战游刃有余。掌握这两者,Web项目难题变得易如反掌!
288 10
|
数据处理 Python
Flask 项目工程目录层级划分
本文介绍了如何将 Flask 项目工程目录层级按照主题分类划分,主要包括模型层、视图层、表单层、模板文件和静态文件。通过合理地组织项目文件,可以提高项目的可读性、可维护性和可扩展性。
512 5
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
321 0
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
658 1
|
前端开发 索引 Python
【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str
【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
974 86
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API