Estou olhando para isso há um tempo e não estou tendo sorte. Se eu executar "alambic upgrade head" na linha de comando, ele funcionará muito bem. Eu gostaria de fazer isso no FastAPI para que, quando inicializado, ele atualize o esquema do banco de dados. Então, depois de muita pesquisa, descobri este método:
async def run_migrations():
alembic_cfg = Config("alembic.ini")
url = str(engine.url)
async with engine.begin() as conn:
await conn.run_sync(alembic_cfg.set_main_option, "sqlalchemy.url", url)
await conn.run_sync(command.upgrade, alembic_cfg, "head")
Eu chamo isso durante a inicialização do FastAPI. Isso me dá esse erro:
TypeError: Config.set_main_option() takes 3 positional arguments but 4 were given
Eu também tentei:
await conn.run_sync(alembic_cfg.set_main_option("sqlalchemy.url", url))
Mas isso me dá:
TypeError: 'NoneType' object is not callable
run_sync não gosta da maneira como estou fazendo isso? Não estou passando 4 argumentos para set_main_option. O valor do url está correto porque imprimi para ter certeza.
Ou existe uma maneira mais fácil/melhor de fazer uma atualização a partir do fastapi?
Obrigado
- SQLAlchemy 2.0.32
- uvicórnio 0.30.6
- fastapi 0.112.1
- alambique 1.13.2