Я пытаюсь реализовать python-social-auth в Flask. Я сгладил множество перегибов, пытаясь одновременно интерпретировать около 4 руководств и полную книгу Flask, и чувствую, что зашел в тупик с Flask-migrate.
В настоящее время я использую следующий код для создания таблиц, необходимых для работы python-social-auth в среде flask-sqlalchemy.
from social.apps.flask_app.default import models
models.PSABase.metadata.create_all(db.engine)
Теперь они, очевидно, используют какую-то форму своей собственной базы, не связанную с моим фактическим db-объектом. Это, в свою очередь, приводит к тому, что Flask-Migrate полностью пропускает эти таблицы и удаляет их при миграции. Теперь, очевидно, я могу удалить эти db-drops при каждом удалении, но я могу представить, что это одна из тех вещей, о которых в какой-то момент забудут, и внезапно у меня больше не будет связей OAuth.
Я получил это решение для работы с использованием (и модификацией) команды manage.py-command syncdb, как это было предложено пример Flask python-social-auth
Мигель Гринберг, автор Flask-Migrate, отвечает здесь на проблему, которая кажется очень похож на мой.
Самое близкое, что я смог найти при переполнении стека, было это, но оно тоже не исчезает много света на все это для меня, и ответ так и не был принят (и я не могу заставить его работать, я пытался несколько раз)
Для справки, вот мой 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/migration/upgrade создают только мою пользовательскую таблицу (и, очевидно, миграционную), но не таблицы социальной аутентификации, в то время как команда syncdb работает для таблиц python-social-auth.
Из ответа github я понимаю, что это не поддерживается Flask-Migrate, но мне интересно, есть ли способ возиться с PSABase-таблицами, чтобы они были подобраны объектом db, отправленным в Migrate.
Любые предложения приветствуются.
(Кроме того, постер впервые. Я чувствую, что провел много исследований и попробовал довольно много решений, прежде чем наконец пришел сюда, чтобы опубликовать. Если я пропустил что-то очевидное в рекомендациях SO, не стесняйтесь укажите это мне в личном сообщении, и я с радостью обязуюсь)