小编Sjo*_*lus的帖子

如何将flask-migrate与其他declarative_bases一起使用

我正在尝试在Flask中实现python-social-auth。我已经消除了很多麻烦,同时尝试解释约4篇教程和一本完整的Flask书,并且觉得Flask-migrate陷入了某种僵局。

我目前正在使用以下代码创建python-social-auth在flask-sqlalchemy环境中运行所需的表。

from social.apps.flask_app.default import models
models.PSABase.metadata.create_all(db.engine)
Run Code Online (Sandbox Code Playgroud)

现在,他们显然正在使用某种形式的自己的Base,与我的实际db-object无关。反过来,这会使Flask-Migrate完全错过这些表,并在迁移中将其删除。现在,很明显,我可以从每次删除操作中删除这些db-drop,但是我可以想象,这是一件事会被遗忘的事情之一,突然之间我再也没有OAuth-tie了。

我已经获得了此解决方案,以按照python-social-auth Flask示例的建议使用manage.py-command syncdb的用法(和修改)

Flask-Migrate的作者Miguel Grinberg在回复一个看起来与我非常相似的问题。

我在堆栈溢出时能找到的最接近的是这个,但对我来说,它并没有给我们太多启示,而且答案从未被接受(而且我无法使它起作用,我已经尝试了几次)

供参考,这是我的manage.py:

#!/usr/bin/env python

from flask.ext.script import Server, Manager, Shell
from flask.ext.migrate import Migrate, MigrateCommand


from app import app, db

manager = Manager(app)
manager.add_command('runserver', Server())
manager.add_command('shell', Shell(make_context=lambda: {
    'app': app,
    'db_session': db.session
}))

migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

@manager.command
def syncdb():
    from social.apps.flask_app.default import models
    models.PSABase.metadata.create_all(db.engine)
    db.create_all()

if __name__ == '__main__':
    manager.run()
Run Code Online (Sandbox Code Playgroud)

为了明确起见,db init / migration / upgrade命令仅创建我的用户表(显然是迁移表),而不创建社交auth表,而syncdb命令适用于python-social-auth表。 …

sqlalchemy flask-sqlalchemy flask-migrate python-social-auth

5
推荐指数
2
解决办法
2170
查看次数