一、Flask-SQLAlchemy
Flask-SQLAlchemy是Flask的一个扩展,这个扩展包装了SQLAlchemy。使用集成了Flask的框架可以简化配置和操作!两者原理是相同的,从使用的角度来看看两者的不同。
1.安装
和其他扩展一样,Flask-SQLAlchemy也是通过pip安装
pip install flask-sqlalchemy
或者从pycharm安装
2.数据库连接:
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
db = SQLAlchemy(app)
3.创建ORM模型:
**虽然flask_sqlalchemy给我们提供了这个特性,但是不推荐使用。因为明言胜于暗喻**
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title = db.Column(db.String(50),nullable=False)
uid = db.Column(db.Integer,db.ForeignKey("user_model.id"))
author = db.relationship("User",backref="artiles")
4.将ORM模型映射到数据库:
db.drop_all()
db.create_all()
以后session也不需要使用`sessionmaker`来创建了。直接使用`db.session`就可以了。
6.查询数据:
如果查找数据只是查找一个模型上的数据,那么可以通过`模型.query`的方式进行查找。`query`就跟之前的sqlalchemy中的query方法是一样用的。示例代码如下:
users = User.query.order_by(User.id.desc()).all()
print(users)
二、数据库迁移
因为采用`db.create_all`在后期修改字段的时候,不会自动的映射到数据库中,必须删除表,然后重新运行`db.craete_all`才会重新映射,这样不符合我们的需求。因此数据库迁移就是为了解决这个问题,她可以在每次修改模型后,可以通过迁移指令将修改的东西映射到数据库中。接下来介绍的是通过alembic进行数据库迁移的操作步骤。
最终要实现 ORM -> 迁移脚本 ->映射到数据库中的过程,每一个变化都有对应的指令。
1.在虚拟环境中安装alembic
2.创建一个数据库、定义好自己的模型,同时使用alembic创建一个仓库
alembic init [仓库的名字,推荐使用alembic]
3.模型、迁移仓库、数据库有了,下一步就是连接他们。修改配置文件
import sys, os
sys.path.append( os.path.dirname( os.path.dirname( __file__ ) ) )
其中os.path.dirname(__file__)是寻找当前路径的上一级目录
4. 将ORM模型生成迁移脚本、将生成的脚本映射到数据库:
`alembic revision --autogenerate -m 'message'`
`alembic upgrade head`
PS:以后如果修改了模型,重复4、5步骤。
5.常用命令:
1. init:创建一个alembic仓库。
2. revision:创建一个新的版本文件。
3. --autogenerate:自动将当前模型的修改,生成迁移脚本。
4. -m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
5. upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
6. [head]:代表最新的迁移脚本的版本号。
7. downgrade:会执行指定版本的迁移文件中的downgrade函数。
8. heads:展示head指向的脚本文件版本号。
9. history:列出所有的迁移版本及其信息。
10. current:展示当前数据库中的版本号。
三、还是数据库迁移
Flask-Migrate是Flask的一个扩展包,里面集成了很多常用的命令封装,可以很方面的完成数据库的迁移。flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中。
一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中。这时候如果有一个工具能专门做这种事情,就显得非常有用了,下面介绍如何使用Flask-Migrate来完成数据库迁移!
1.安装
pip install flask-migrate
pip install flask-script
PS:flask-migrate使用命令库时需要flask-script这个插件。
2.配置
创建一个脚本文件manage.py,通过这个文件来解释一些命令
from flask_script import Manager
from zhiliao import app
from exts import db
from flask_migrate import Migrate,MigrateCommand
from models import User
manager = Manager(app)
Migrate(app,db)
manager.add_command("db",MigrateCommand)
zhiliao.py
exts.py
flask_script、flask_migrate是两个拓展包
用来绑定app和db到flask_migrate的
manager.add_command("db",MigrateCommand)
manager = Manager(app)
添加MigrateCommand文件下的所有命令到项目中
3.使用
flask_migrate常用命令:
1. 初始化一个环境:python manage.py db init
2. 自动检测模型,生成迁移脚本:python manage.py db migrate
3. 将迁移脚本映射到数据库中:python manage.py db upgrade
4. 更多命令:python manage.py db --help
四、补充说明
Flask-Migrate进行数据库迁移要使用到Flask-Script这个插件,因为Flask-Migrate内部有一个命令库,Flask-Script的作用是可以通过命令行的形式来操作Flask。我们也可以设计自己的命令库,
2.在mana.py中添加这些个命令
from flask_script import Manager
from zhiliao import app,BackendUser,db
from db_script import db_manager
manager = Manager(app)
manager.add_command("db",db_manager)
3.这样就可以通过命令行的形式来实现这些功能了!
4.说明
manage.commad:这个方法是用来添加那些不需要传递参数的命令。
使用:这个方法是用来添加那些需要传递参数的命令。
有几个参数就需要 写几个`option`。
五、总结
数据库学习到这里就暂时结束了!虽然把所有例程都跑了一遍,但也只是对它有一个模糊的了解,并没有深入去理解。由于时间关系,以后有进一步了解的话再过来补充,就这样吧。。期待后面的学习!