flask-sqlalchemy使用alembic讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimill/article/details/82257688

前面为大家讲解了alembic如何使用?本节就为大家讲讲flask_sqlalchemy如何使用alembic?

在讲解之前,请确保你电脑已安装alembic这一插件。(具体安装请前往 https://blog.csdn.net/aimill/article/details/82152173

老规矩,我们先创建一个项目,取名叫flask_alembic_demo

由于我们要创建模型,那就要涉及到数据库配置参数信息,为了讲解方便,我们在项目下新建一个config.py文件,其代码如下:

DIALCT = "mysql"
DRIVER = "pymysql"
USERNAME = "root"
PASSWORD = "admin"
HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "flask_alembic_demo"
DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI

配置信息写好了,然后我们在flask_alembic_demo.py文件中输入以下代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer , primary_key=True , autoincrement=True)
    name = db.Column(db.String(50) , nullable=False)

@app.route('/')
def index():
    return "index page"

if __name__ == "__main__":
    app.run()

模型创建好了,那么flask_sqlalchemy如何使用alembic呢?其实呢,alembic在flask_sqlalchemy下的用法跟sqlalchemy用法类似,唯一区别在于。

第一步:创建alembic仓库

打开cmd客户端,进入到当前项目虚拟环境中,输入下方命令

alembic init alembic

运行上诉命令,当前项目下就多了alembic及alembic.ini文件

第二步:创建数据库迁移文件

1、先在alembic_ini文件将sqlalchemy.url修改为下方代码

sqlalchemy.url = mysql+pymysql://root:admin@localhost/flask_alembic_demo

2、然后在env.py文件导入下方代码

import sys,os


sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import flask_alembic_dmeo

之前我们在sqlalchemy中使用alembic时,target_metadata是不是等于项目文件名.Base.metdata,是吧?但是在flask_sqlalchemy中并没有Base这个类,flask_sqlalchemy用的db.Model对吧!代码如下:

target_metadata = flask_alembic_dmeo.db.Model.metadata

:sqlalchemy跟flask_sqlachemy使用alembic最大区别就在这

在cmd客户端输入alembic revision --autogenerate -m "first commit"命令并运行,结果在versions文件下就多了一个迁移脚本文件

3、将生成的迁移文件映射到数据库中

在cmd终端输入下方命令

alembic upgrade head

运行上方代码,然后进入mysql命令行终端,输入show tables,就可以看到User模型已成功映射到数据库中。


 

猜你喜欢

转载自blog.csdn.net/aimill/article/details/82257688
今日推荐