I have an existing database with tables created by SQLAlchemy. I want to add Alembic to help me with migration. But when I execute flask db migrate
, Alembic want to remove all existing tables:
INFO [alembic.autogenerate.compare] Detected removed table 'order'
INFO [alembic.autogenerate.compare] Detected removed table 'manager'
Seems that Alembic don't see my Models. These are on separate package with this type of declaration :
@as_declarative()
class Base:
id: Mapped[int] = mapped_column(primary_key=True)
[...]
class Manager(Base):
__tablename__ = 'manager'
__table_args__ = {'extend_existing': True}
[...]
There is my app.py file :
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from my_custom_package import settings
app = Flask(__name__)
app.config.from_object(settings)
db = SQLAlchemy(app)
from my_custom_package.models import Base, Order, Manager
migrate = Migrate(app, db)
I unsuccessfully try to add somethings like this into env.py
:
from msPytDependencies.models import Base, Manager, Order
target_metadata = Base.metadata
// target_metadata = [Manager.metadata, Order.metadata]
When I simply try this, all seems to be OK :
flask shell
---
>>> from my_custom_package.models import Base, Manager, Order
>>> len(Base.metadata.tables)
2
>>> Base.metadata.tables
FacadeDict({'manager': Table('manager', MetaData(), Column( [...]
Lot of topics talks about similar problems. But I can't manage to resolve my problem.