Flask に python-social-auth を実装しようとしています。約 4 つのチュートリアルと完全な Flask-book を同時に解釈しようとしているときに、大量のねじれを解決しました。
現在、次のコードを使用して、python-social-auth がフラスコの sqlalchemy 環境で機能するために必要なテーブルを作成しています。
from social.apps.flask_app.default import models
models.PSABase.metadata.create_all(db.engine)
現在、彼らは明らかに、私の実際の db-object とは関係なく、何らかの形の独自の Base を使用しています。これにより、Flask-Migrate はこれらのテーブルを完全に見逃し、移行でそれらを削除します。もちろん、すべての削除からこれらの db-drop を削除することはできますが、ある時点で忘れ去られ、突然 OAuth とのつながりがなくなったものの 1 つであると想像できます。
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 テーブルに対して機能します。
これはFlask-Migrateでサポートされていないことをgithubの応答から理解していますが、PSABaseテーブルをいじって、Migrateに送信されたdbオブジェクトによってピックアップされるようにする方法があるかどうか疑問に思っています。
どんな提案でも大歓迎です。
(また、初めてのポスターです。最終的にここに投稿する前に、多くの調査を行い、かなりの数の解決策を試したと思います。SOのガイドラインで明らかな何かを見逃した場合は、躊躇しないでくださいプライベート メッセージでその点を指摘していただければ、喜んで対応します)