我正在尝试在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