python的flask框架mysql数据库迁移

最近在学习《flaskweb开发》,教程里采用 sqlite 数据库,我自己用的是mysql,在到数据库迁移部分有点懵了,想跳过去,但是到后面发现很不方便,于是折腾了好长时间,网上也找不到现成的教程,于是想着自己搞一下试试,终于大功告成!

1.框架
flask_migrate
flask_sqlalchemy
2.然后是一些配置
/config.py

class Config(object):
    CSRF_ENABLED = True
    SECRET_KEY = 'you-will-never-guess'

    @staticmethod
    def init_app(app):
        pass

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'mysql://root:root@localhost/test'

config = {
    'development': DevelopmentConfig,
    'default': DevelopmentConfig
}

/manager.py

from app import create_app,db
from app.models import  User #注册数据库模型
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand   #载入migrate扩展

app = create_app( 'default')
manager = Manager(app)
migrate = Migrate(app, db)  #注册migrate到flask


manager.add_command('db', MigrateCommand)   #在终端环境下添加一个db命令

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

/app/init.py

from flask import Flask
from config import config
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app(config_name):
    """ 使用工厂函数初始化程序实例"""
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app=app)

    # db.init_app(app=app)

    return app

/app/models.py

from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    nickname = db.Column(db.String(64), index = True, unique = True)
    email = db.Column(db.String(120), index = True, unique = True)

    def __repr__(self):
        return '<User %r>' % (self.nickname)

3.完成之后,开始初始化
(web) E:\python\flaskblog>python manage.py db init
在虚拟环境(我的是(web))中进行初始化,根目录下出现migrations文件夹,里面有自动生成的一下文件,脚本等
4.更新models.py

from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    posts = db.relationship('Post', backref='author', lazy='dynamic')

    def __repr__(self):
        return '<User %r>' % (self.nickname)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Post %r>' % (self.body)

5.继续执行迁移命令
python manage.py db migrate -m “first init db”
python manage.py db upgrade
连接mysql可以发现迁移成功了!
成功后的图片
6.继续学习
文件结构

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u011067966/article/details/52049029