我正在尝试在 Flask 中实现 python-social-auth。我在尝试同时解释大约 4 个教程和一本完整的 Flask-book 的同时解决了很多问题,并且觉得我在 Flask-migrate 方面陷入了僵局。
我目前正在使用以下代码来创建 python-social-auth 在 flask-sqlalchemy 环境中运行所需的表。
from social.apps.flask_app.default import models
models.PSABase.metadata.create_all(db.engine)
现在,他们显然在使用某种形式的自己的 Base,与我的实际 db-object 无关。这反过来会导致 Flask-Migrate 完全错过这些表并在迁移中删除它们。现在,显然我可以从每次删除中删除这些 db-drop,但我可以想象它是那些在某一时刻会被遗忘的事情之一,突然之间我不再有 OAuth 关系了。
正如python-social-auth Flask 示例所建议的那样,我已经得到了这个解决方案来使用(和修改)manage.py-command syncdb
Flask-Migrate 的作者 Miguel Grinberg 在这里回复了一个似乎与我非常相似的问题。
我能找到的最接近堆栈溢出的是this,但它对我来说并没有对整个事情有太多启示,而且答案从未被接受(而且我无法让它工作,我尝试了几次)
作为参考,这是我的 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()
澄清一下,db init / migrate / upgrade 命令只创建我的用户表(显然还有迁移表),而不是社交身份验证表,而 syncdb 命令适用于 python-social-auth 表。
我从 github 响应中了解到 Flask-Migrate 不支持此功能,但我想知道是否有办法在 PSABase-tables 中摆弄,以便它们被发送到 Migrate 的 db-object 拾取。
欢迎任何建议。
(另外,第一次发帖。我觉得我已经做了很多研究并尝试了很多解决方案,然后才终于来到这里发布。如果我错过了 SO 指南中明显的内容,请不要犹豫在私信中向我指出这一点,我很乐意效劳)