Flask框之flask_migrate使用介绍

Flask-Migrate是一个基于Alembic的数据库迁移工具,它简化了在Flask应用中管理数据库变更的过程。通过跟踪ORM模型的变化,Flask-Migrate能够自动化地同步这些变更到数据库。在设置中,需要配置数据库连接,创建模型,建立应用,然后使用manage.py命令来执行迁移操作。

在实际的开发环境中,经常会发生数据库修改的行为。一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中。这时候如果有一个工具能专门做这种事情,就显得非常有用了,而flask-migrate就是做这个事情的。flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中。
1.先安装flask-migrate

pip install flask-migrate

实例:
1.先建一个资料库存连接配置文件config.py

hostname='127.0.0.1'
port='3306'
username='root'
password='zsrt0760'
database='mytest'
DB_URL='mysql+pymysql://{}:{}@{}:{}/{}'.format(username,password,hostname,port,database)

SQLALCHEMY_DATABASE_URI=DB_URL
SQLALCHEMY_TRACK_MODIFICATIONS=False

2.建一个中间模块桥接模块与app--exts.py

from  flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()

3.建模型–models

from exts import db
#单独一模块专做模型映射到数据库存
class User(db.Model):
    __tablename__='project_user'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    name=db.Column(db.String(50))
    email=db.Column(db.String(50))
    password=db.Column(db.String(50))

4.建一个app的文件如flask_app.py

from flask  import Flask
from exts import db
import config
app=Flask(__name__)
app.config.from_object(config)
db.init_app(app)
# user=User(name='jerry',email='siek@163.com',password='kehdj')
# db.session.add(user)
# db.session.commit()
@app.route('/')
def index():
    return '这是首页'
if __name__ == '__main__':
    app.run(debug=True)

5.建一个manage.py命令行用到的文件

from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from exts import db
from flask_app import app

#需那个模块映射到资料库,就导入那一个
from models import User
manage=Manager(app)
#app与db产生联系
Migrate(app,db)

manage.add_command('db',MigrateCommand)
if __name__ == '__main__':
    manage.run()

6.上述建好后,需先运行app,再在DOS进入虚拟目录执行如下命令
在这里插入图片描述
7.扩展-添加数据
用以前的方法是没法添加,这时需通过命令传参数的方法进行添加

@manage.option('-n',dest='name')
@manage.option('-e',dest='email')
@manage.option('-p',dest='password')
def user(name,email,password):
    data=User(name=name,email=email,password=password)
    db.session.add(data)
    db.session.commit()
### 解决 Flask 项目中无法导入 `MigrateCommand` 的问题 在使用 Flask-Migrate 时,如果遇到 `ImportError: cannot import name 'MigrateCommand' from 'flask_migrate'`,通常是由于版本不兼容或依赖安装错误引起的。以下是详细的分析和解决方案: #### 1. 版本不兼容问题 从 Flask-Migrate 3.x 版本开始,`MigrateCommand` 已被弃用[^1]。取而代之的是直接使用 `flask db` 命令来执行迁移操作。如果代码中仍然尝试导入 `MigrateCommand`,则会导致导入失败。 解决方法是更新代码以移除对 `MigrateCommand` 的依赖。例如,将以下代码: ```python from flask_migrate import Migrate, MigrateCommand ``` 替换为: ```python from flask_migrate import Migrate ``` 同时,在初始化命令时,不再需要注册 `MigrateCommand`。例如,将以下代码: ```python migrate = Migrate(app, db) manager.add_command('db', MigrateCommand) ``` 替换为: ```python migrate = Migrate(app, db) ``` 然后通过 Flask 内置的 CLI 工具运行迁移命令,例如: ```bash flask db init flask db migrate flask db upgrade ``` #### 2. 依赖安装错误 确保正确安装了 Flask-Migrate 和 Alembic。可以使用以下命令重新安装依赖项: ```bash pip install Flask-Migrate Alembic ``` 如果使用的是较新的 Python 版本(如 Python 3.8 或更高版本),建议检查 Flask-Migrate 的版本是否与当前环境兼容。可以通过以下命令指定安装特定版本: ```bash pip install Flask-Migrate==3.0.0 ``` #### 3. 虚拟环境隔离 为了避免全局环境中的依赖冲突,建议使用虚拟环境管理依赖项。创建并激活虚拟环境的步骤如下: ```bash python -m venv venv source venv/bin/activate # Windows 用户使用 `venv\Scripts\activate` pip install Flask Flask-SQLAlchemy Flask-Migrate ``` #### 4. 示例代码 以下是一个完整的 Flask 项目示例,展示如何配置数据库迁移而无需使用 `MigrateCommand`: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' db = SQLAlchemy(app) migrate = Migrate(app, db) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) ``` 运行以下命令以初始化和执行迁移: ```bash flask db init flask db migrate -m "Initial migration" flask db upgrade ``` #### 5. 检查 Flask 版本 确保使用Flask 版本与 Flask-Migrate 兼容。可以通过以下命令检查版本: ```bash pip show Flask Flask-Migrate ``` 如果 Flask 版本过旧,可能需要升级 Flask: ```bash pip install --upgrade Flask ``` ### 注意事项 - 如果必须使用 `MigrateCommand`,可以降级到 Flask-Migrate 2.x 版本[^2]: ```bash pip install Flask-Migrate==2.0.4 ``` - 推荐使用 Flask 内置的 CLI 工具,因为这是官方支持的方式,并且更易于维护。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值