У меня очень простая и глупая проблема, но я не знаю, что мне не хватает. По сути, то, как я сейчас написал свое приложение для управления, похоже, что flask migrate всегда создает абсолютную миграцию, а не просто набор изменений для миграции из предыдущей схемы в текущую.
Например, если я удалю свои миграции и создаю новую БД, а затем сделаю manage db migrate
, а затем manage db upgrade
, все будет работать. Если я затем внесу изменения в db.Model
таблицу, а затем сделаю manage db migrate
, я не получу сообщения об ошибке.
Однако новый сценарий миграции указывает на предыдущий, но не только на разницу, необходимую для перевода базы данных из предыдущего состояния схемы в новое, но и на полную (абсолютную) миграцию, начиная с пустой схемы - например, это будет попробуйте снова создать таблицы с нуля (с изменением), а не только, например, применить изменение к уже созданной схеме. То есть, хотя миграция связана с предыдущей, она не учитывает то, что было применено предыдущей миграцией. Это означает, что их нельзя связать в цепочку, потому что, например, вторая миграция будет пытаться снова создать таблицы, и поэтому manage db upgrade
завершится ошибкой при втором вызове.
Мое приложение manage
выглядит так:
from flask_migrate import Migrate, MigrateCommand
from src.common.db import db
from src.common.flaskery import global_flask_app, global_flask_manager
app = global_flask_app(__name__)
migrate = Migrate(app, db)
manager = global_flask_manager(__name__)
manager.add_command('db', MigrateCommand)
from src.db.models import *
def main():
manager.run()
if __name__ == '__main__':
main()
Аналогично: Flask Migrate с использованием других схем postgres (__table_args__ = { 'schema': 'test_schema']})
op.execute("create schema data")
вdef upgrade()
, а затемop.execute("drop schema data")
в разделыdef downgrade()
. - person s5s   schedule 02.09.2019