Flask交流

十四、Flask进行数据库更新迁移

2018-09-17  本文已影响487人  十柒年

1.Migrate的使用

之前咱们通过SQLAlchemy来创建表的时候,都是采用的db.create_all()方法,这种方法有一个非常严重的问题,就是当我们需要添加或者删除数据库表中的字段的时候,直接修改Models里面的类是没有用的,必须要把数据库删除了,然后重新执行db.create_all()方法,才会把我们修改的内容映射到数据库中,这在项目上线之后,数据库中已经存在数据了,如果要更新数据库了,这种方法是万万不可采用的,不可能把数据库删了,在重新新建,这时候咱们就需要对数据库进行迁移。flask_migrate可以通过命令把修改后的模型直接映射到数据库中而不用删除数据库。

2.代码部分

这里咱们就不绕弯子了,直接上代码。app.py,这里需要导入两个文件,一个是exts.py 一个是config。exts是为了解决循环引用,单独把SQL-Alchemy独立出去的代码文件,cconfig是连接数据库的配置文件。

from flask import Flask
from exts import db
import config

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)

exts.py代码如下。在这里单独引入flask_sqlalchemy,然后app和Models都引入这个文件,可以防止循环引用。

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

config.py 连接Mysql的配置文件。

DIALECT = 'mysql'  # 要用的什么数据库
DRIVER = 'pymysql'  # 连接数据库驱动
USERNAME = 'root'  # 用户名
PASSWORD = 'root'  # 密码
HOST = 'localhost'  # 服务器
PORT = '3306'  # 端口
DATABASE = 'migrate'  # 数据库名

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

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)
    tags = db.Column(db.String(100),nullable=False)

重点来了,重点就是manage.py。这个文件是进行数据迁移的重点。先看代码。

from flask_script import Manager
from app import app
from flask_migrate import Migrate,MigrateCommand
from exts import db
from Models import  Article
manager = Manager(app)
# init  migrate upgrade
# 模型 -> 迁移文件 -> 表
# 1.要使用flask_migrate,必须绑定app和DB
migrate = Migrate(app, db)

# 2.把migrateCommand命令添加到manager中。
manager.add_command('db',MigrateCommand)

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

在这里文件里,需要导入flask,app文件中app变量,以及flask_migrate 中的Migrate,MigrateCommand,还有exts 中引入sql_alchemy中定义的变量db。然后通过manager.add_command('db',MigrateCommand),把Migrate中的命令添加到manage中,然后就可以在控制台进行数据库的迁移了。命令如下。

python manage.py db init
python manage.py db migrate
python manage.py db upgrade

第一次执行数据库迁移的时候,需要执行三个命令。

更多学习资料请关注"爱游戏爱编程"。


爱游戏爱编程.jpg
上一篇 下一篇

猜你喜欢

热点阅读