【问题标题】:flask migrate seemed to delete all my database data烧瓶迁移似乎删除了我所有的数据库数据
【发布时间】:2015-11-24 23:19:09
【问题描述】:

这是我的迁移文件:

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + 'C:\\flaskDB\\commBorn3.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)



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

我运行了标准命令:

python app.py db init

python app.py db migrate

python app.py db upgrade

生成的数据库是一个同名文件,其大小以 kb 为单位,但只有一个表“alembic_version”,其中没有任何内容。我试图降级,发现我所有的桌子都回来了,但它们都是空的。我做错什么了?所有数据隐藏在哪里(文件大小相同 kb)?

【问题讨论】:

  • 我应该指出我已经从各个表中删除了列并删除了其他表吗?

标签: python flask flask-migrate


【解决方案1】:

您应该始终检查在db migrate 之后创建的migrations/versions 中的迁移文件,并且只有在一切正常时才执行db upgrade

问题在于,在 models.py 中,您从“普通”应用程序而不是迁移脚本中导入了 db = SQLAlchemy(app) 实例。所以在迁移脚本中你实际上没有定义任何模型,这就是它删除数据库中所有表的原因。

解决方案很简单:只需在导入模型时使用迁移脚本的应用上下文即可:

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + 'C:\\flaskDB\\commBorn3.db'

db = SQLAlchemy(app)

# Import database models with app context
with app.app_context():
  from models import *

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 2018-10-26
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2022-12-18
    相关资源
    最近更新 更多