models.py
from exts import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key =True,autoincrement = True)
telephone = db.Column(db.String(11),nullable = False)
username = db.Column(db.String(50),nullable = False)
password = db.Column(db.String(100),nullable = False)
manager.py
# -*- coding: utf-8 -*-
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from zlktqa import app
from exts import db
from models import User
manager = Manager(app)
#使用Migrate绑定app和db
migrate = Migrate(app,db)
#添加迁移脚本的命令到manager中
manager.add_command('db',MigrateCommand)
if __name__ == '__main__':
manager.run()
初始化:(venv) python manage.py db init 这个命令会在项目下创建 migrations 文件夹,所有迁移脚本都存放其中。
创建第一个版本:(venv)
pythonmanage.pydbmigrate,检查migrations\versions,会新建一个版本.py,检查里面表格及字段运行升级(venv)
python manage.py db upgrade,会把项目使用的数据库文件,更新为新的表格、字段,同时保留数据(此时打开数据库会发现表已经建好)
我第一次操作时出现了问题,原因是config.py连接数据库时有个字段不对
config.py更改为一下后运行正常
(原本我在DB_URI = ‘mysql+mysqldb://{}:{}@{}:{}/{}’.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) 这里添加了一个charset会报错,去调就没事了)
import os
DEBUG = True
SECRET_KEY = os.urandom(24)
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'zlktqa_demo'
USERNAME = 'root'
PASSWORD = 'password'
DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False