flask中數據庫的遷移


1.代碼

# -*- coding: utf-8 -*-

from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import MigrateCommand, Migrate

app = Flask(__name__)
# 數據庫的連接配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:mysql@17.11.15.12:3306/flask_0620'
# 追蹤數據庫修改的配置,如果為True,那么數據庫在數據操作的時候,會向外發出信號
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
manager = Manager(app)
# 初始化SQLAlchemy對象並且將app傳入
db = SQLAlchemy(app)
# 關聯遷移,將app和數據庫的操作對象傳入
Migrate(app, db, )
manager.add_command('ddbb', MigrateCommand)


# 定義 角色 的模型,對應到數據庫就是一張表
# admin:
class Role(db.Model):
    # 指定表名,可以不用寫,默認會以當前類的類名小寫作為表名
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    info = db.Column(db.String(64))
    # 指定關系,可以通過一個屬性將當前一的一方查詢出所對應的多的這一方的所有數據
    # backref:反向引用,給user身上添加role這個屬性,並且該屬性指定的值就是當前用戶所對應的一的這一方的數據
    # users和role是自己隨便起的名字
    users = db.relationship('User', backref='role')

    def __repr__(self):
        return "<Role %s>" % self.name


class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(64))
    idcard = db.Column(db.String(64), unique=True)
    # 添加外鍵,指定該外鍵關系哪張表的哪一列
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __repr__(self):
        return "<User %s>" % self.name


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


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

2.執行遷移的命令

>初始化遷移,創建遷移所需要的一系列的命令

python manager.py ddbb init

>生成當前版本的遷移文件

python manager.py ddbb migrate -m'initial' 

>執行遷移文件

python manager.py ddbb upgrade

3.當表中需要增加新的字段,如何再進行數據庫的遷移

python manager.py ddbb migrate -m'role and info clo'

python manager.py ddbb upgrade

4.遷移的回退

>版本的查看

python manager.py ddbb current
python manager.py ddbb history

>返回到某一個版本

python manager.py ddbb downgrade(upgrade) 版本號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM