Flask-Migrate的使用

因为采用db.create_all在后期修改字段的时候,不会自动更改到数据库中,必须删除表,然后重新运行db.create_all才会重新映射,这样是不符合实际情况的。因此flask-migrate就解决了这个问题,可以直接将修改的东西映射到数据库中。

1.使用flask-migrate必须借助flask-scripts,这个包MigrateCommand中包含了所有和数据库相关的命令。
2.flask-migrate`相关命令:

  • python manage.py db init:初始化一个迁移脚本的环境,只需要执行一次。
  • python manage.py db migrate:将模型生成迁移文件,只要模型更改了,就需要执行一次这个命令。
  • python manage.py db upgrade`:将迁移文件真正的映射到数据库中。每次也需要执行一次这个命令。

3.注意点:
需要将你想要映射到数据库中的模型,都要导入到manage.py文件中,如果没有导入进去,就不会映射到数据库中。

代码:
db_demo3:

from flask import Flask
from exts import db
import config
import pymysql
pymysql.install_as_MySQLdb()

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


@app.route('/')
def hello_world():
    return 'hello world!'

if __name__ == '__main__':
    app.run(debug=True)

manage.py:

from flask_script import Manager
from db_demo3 import app
from flask_migrate import Migrate,MigrateCommand
from exts import db
from models import Article

manager = Manager(app)

migrate = Migrate(app,db)

manager.add_command('db',MigrateCommand)


if __name__ == '__main__':
    manager.run()

exts.py:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

models.py

from exts import db

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

config.py


DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = '123456'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'db_demo3'

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD
                                            ,HOST,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False

猜你喜欢

转载自blog.csdn.net/hellosweet1/article/details/80258465
今日推荐