Я пытаюсь реализовать python-social-auth в Flask. Я вымыл тонны перегибов, пытаясь одновременно интерпретировать 4 урока и полную книгу с флягами, и чувствую, что я достиг своего тупика с помощью Flask-migrate.Как использовать flask-migrate с другими declarative_bases
В настоящее время я использую следующий код для создания таблиц, необходимых для работы python-social-auth в среде flask-sqlalchemy.
from social.apps.flask_app.default import models
models.PSABase.metadata.create_all(db.engine)
Теперь они, очевидно, используют некоторую форму своей собственной базы, не связанную с моим фактическим db-объектом. Это, в свою очередь, заставляет Flask-Migrate полностью пропустить эти таблицы и удалить их при миграции. Теперь, очевидно, я могу удалить эти db-капли из каждого удаления, но я могу представить, что это одна из тех вещей, о которых в какой-то момент забудут, и внезапно у меня больше нет связей OAuth.
Я получил это решение для работы с использованием (и модификации) в manage.py командно-SyncDB как предложено the python-social-auth Flask example
Мигель Гринберг, автор Колба-Migrate отвечает here к проблеме, похоже, очень похож на мою.
Самый близкий, который я мог найти при переполнении стека, был 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()
и уточнить, дБ INIT/мигрирует/обновить команды только создать свой пользовательский стол (и миграции одно очевидно) , но не социальные, а команда syncdb работает для таблиц python-social-auth.
Я понимаю из ответа github, что это не поддерживается Flask-Migrate, но мне интересно, есть ли способ поиграть в таблицы PSABase, чтобы их подхватили db-объект, отправленный в Migrate ,
Любые предложения приветствуются.
(Кроме того, первый раз плакат. Я чувствую, что провел много исследований и попробовал немало решений, прежде чем я, наконец, пришел сюда, чтобы опубликовать сообщение. Если я пропустил что-то очевидное в руководящих принципах SO, Не стесняйтесь указать на это в личном сообщении, и я с радостью соглашусь)
Благодарим вас за ответ, Мигель. Хорошо, я почти полностью забыл об Alembic. Не могу ли я просто пропустить Flask-Migrate и использовать это напрямую? Мне кажется, что это может быть обмануто, если подумать, что это настройка с несколькими базами данных (в основном это с точки зрения Alembics). – Sjolus
Хм, не уверен, что вы получите разные результаты с Alembic. Если вы настроите конфигурацию multidb (которую вы также можете настроить с помощью Flask-Migrate, btw), проблема будет отображаться с обеих сторон. Миграции для вашего обычного db будут по-прежнему пытаться удалить модели PSA, но в дополнение к этому миграция для стороны PSA также попытается удалить ваши таблицы. Один из способов избежать этого беспорядка - использовать две отдельные базы данных, тогда таблицы с одной стороны не будут видны другим. – Miguel
А, да, они будут противоречить друг другу. Не было бы слишком плохо с отдельными db, но было бы легко пропустить для пользователей во время устранения неполадок, которые, как я думаю. Наверное, я мог бы просто реализовать социальный материал. Мне просто грустно было так близко к финишу. Это все работает, за исключением миграций, что необходимо, заставляя меня снова разорвать его и начать с нуля: P – Sjolus