python sqlalchemy alembic

python - Alambique: sqlalchemy no detecta las tablas existentes



alembic python (1)

He hecho una pregunta ( Alembic - migración inicial de sqlalchemy ) sobre cómo detectar tablas usando

target_metadata = Base.metadata

para

alembic revision --autogenerate -m "initial migration"

Después de importar mis modelos al archivo env.py, parecía funcionar bien, pero no detecta las tablas realmente existentes, por lo que crea un archivo de migración con todas las tablas, por ejemplo:

def upgrade(): ### commands auto generated by Alembic - please adjust! ### op.create_table(''Brand'', sa.Column(''id'', sa.Integer(), nullable=False), sa.Column(''name'', sa.String(), nullable=True), sa.Column(''slug'', sa.String(), nullable=True), sa.Column(''date_created'', sa.DateTime(), nullable=True), sa.Column(''date_updated'', sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint(''id''), schema=''Products'' ) def downgrade(): ### commands auto generated by Alembic - please adjust! ### op.drop_table(''ProductFile'', schema=''Products'')

He intentado:

alembic stamp head

pero después de ejecutar eso y ejecutar el comando autogenerar, el sistema genera todos los modelos una vez más.

from project.apps.users.models import * from project.apps.orders.models import * from project.apps.products.models import * from project.base import Base, metadata # this is the Alembic Config object, which provides # access to the values within the .ini file in use. config = context.config # Interpret the config file for Python logging. # This line sets up loggers basically. fileConfig(config.config_file_name) # add your model''s MetaData object here # for ''autogenerate'' support # from myapp import mymodel target_metadata = Base.metadata

¿Cómo evito ese problema?

Editar:

ENV.py:

https://gist.github.com/pypetey/bb65807ce773d8baeaf1

Bajé el DB y ejecuté una migración

(env) D:/projekty/test>alembic revision --autogenerate INFO [alembic.migration] Context impl MSSQLImpl. INFO [alembic.migration] Will assume transactional DDL. INFO [alembic.autogenerate.compare] Detected added table u''Users.Country'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Brand'' INFO [alembic.autogenerate.compare] Detected added table u''Users.User'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Product'' INFO [alembic.autogenerate.compare] Detected added table u''Products.ProductFile '' INFO [alembic.autogenerate.compare] Detected added table u''Orders.Order'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Category'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Review'' INFO [alembic.autogenerate.compare] Detected added table u''Users.UserAddress'' INFO [alembic.autogenerate.compare] Detected added table u''Orders.OrderItem'' INFO [alembic.autogenerate.compare] Detected added table u''Orders.OrderStatus'' Generating D:/projekty/test/alembic/versions/1c6337c144a7_.py ... done (env) D:/projekty/test>alembic upgrade head INFO [alembic.migration] Context impl MSSQLImpl. INFO [alembic.migration] Will assume transactional DDL. INFO [alembic.migration] Running upgrade None -> 1c6337c144a7, empty message (env) D:/projekty/test>alembic revision --autogenerate INFO [alembic.migration] Context impl MSSQLImpl. INFO [alembic.migration] Will assume transactional DDL. INFO [alembic.autogenerate.compare] Detected added table u''Users.Country'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Brand'' INFO [alembic.autogenerate.compare] Detected added table u''Users.User'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Product'' INFO [alembic.autogenerate.compare] Detected added table u''Products.ProductFile '' INFO [alembic.autogenerate.compare] Detected added table u''Orders.Order'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Category'' INFO [alembic.autogenerate.compare] Detected added table u''Products.Review'' INFO [alembic.autogenerate.compare] Detected added table u''Users.UserAddress'' INFO [alembic.autogenerate.compare] Detected added table u''Orders.OrderItem'' INFO [alembic.autogenerate.compare] Detected added table u''Orders.OrderStatus'' Generating D:/projekty/test/alembic/versions/5abb204549f_.py ... done


Tuve este mismo problema: no sé si todavía te afecta. Para mí, el problema fue causado porque el esquema que estaba usando no era el predeterminado, creo que lo mismo está sucediendo para usted, ya que está usando un esquema de "Productos". Publiqué un problema en:

https://bitbucket.org/zzzeek/alembic/issue/281/autogenerate-fails-to-detect-existing

Y con un poco de orientación, se resolvió el problema estableciendo include_schemas=True en ambas funciones run_migrations_* en el módulo alambic / env.py.

Ver los documentos :

Si es True, autogenerate escaneará en todos los esquemas ubicados por el método SQLAlchemy get_schema_names () e incluirá todas las diferencias en las tablas encontradas en todos los esquemas. Al usar esta opción, también puede usar la opción EnvironmentContext.configure.include_object para especificar un invocable que pueda filtrar las tablas / esquemas que se incluyen.