Flask框架中如何进行数据库的迁移

Flask框架中如何进行数据库的迁移

Flask框架中进行数据的迁移需要安装Flask-Migrate插件
安装命令:pip install flask-migrate
定义ORM模型

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)

# 数据库的配置变量
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'zzh_flask'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

# 将这个定义好的数据库连接字符串DB_URI,通过`SQLALCHEMY_DATABASE_URI`这个key名配置到`app.config`中。
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
# 设置是否每次数据库修改都跟踪
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 使用`flask_sqlalchemy.SQLAlchemy`这个类定义一个对象,并将`app`传入进去。
db = SQLAlchemy(app)

# 创建一个migrate对象
migrate = Migrate(app, db)


# 定义ORM模型
class User(db.Model):
    __talblename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(200), nullable=False)


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

    # 外键
    # 1.外键的数据类型一定要看,所引用的字段的类型
    # 2.db.ForeignKey("表名.字段名")
    # 3.外键是属于数据库层面的,不推荐直接在ORM中使用
    # db.ForeignKey声明这个字段是外键
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))

    # relationship
    # 1.第一个参数是模型的名字,必须要和模型的名字保持一致
    # 2.backref(back reference):代表反向引用,"articles"代表对方访问我的时候的字段名称,前提是在前面已经关联了一个外键
    # 这里的作用就是通过作者访问他的所有文章,例如user.articles
    author = db.relationship("User", backref="articles")


class UserExtension(db.Model):
    __tablename__ = 'user_extension'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    school = db.Column(db.String(100))
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

    # db.backref
    # 1.在反向应用的时候需要传递一些其他的参数,那么就需要用到这个函数,如果不需要使用,只要在relationship的backref参数上,设置反向引用的名称就可以了
    # 2.uselist=False代表反向引用的时候,不是一个列表,而是一个对象,就是只能查到一个,一对一
    user = db.relationship("User", backref=db.backref("extension", uselist=False))

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

进行模型迁移
flask db init
flask db migrate
flask db upgrade
其中第二步flask db migrate时可以写成flask db migrate -m "first commit",这样写是可以在迁移脚本的时候注明修改了什么。添加的备注会在迁移脚本中体现
在这里插入图片描述
当ORM模型被修改之后,例如我给User添加了一个password字段,那如何迁移
,此时就不要init了,直接 flask db migrate -m "add password",flask db upgrade即可
参考:https://www.zlkt.net/book/detail/10/297

猜你喜欢

转载自blog.csdn.net/weixin_44747173/article/details/125933351