python - flask migrate 似乎删除了我所有的数据库数据

标签 python flask flask-migrate

这是我的迁移文件:

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”,其中什么也没有。我试图降级并发现我所有的表都返回但它们是空的。我做错了什么?所有数据隐藏在哪里(文件大小相同)?

最佳答案

您应该始终检查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()

关于python - flask migrate 似乎删除了我所有的数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33905706/

相关文章:

python - 如何使用virtualenvwrapper进行ckan开发?

Python替换二维数组中的元素=键

python - Flask - 从函数获取路由 URL

Flask Migrate 使用不同的 postgres 模式( __table_args__ = {'schema' : 'test_schema' ]})

flask - 如何为 Alembic 迁移的每一行设置唯一值

python - 我可以在Python中的for循环中使用变量作为索引吗?

python - 在 Flask 和非 Flask 程序中使用相同的数据库抽象

python - 在 Flask 应用程序中提交表单时出现错误请求错误的原因是什么?

flask - 为什么 Flask-Migrate 让我进行两步迁移?

python - 如何在 Python 3 中扩展 datetime.date?