我有一个项目,我正在使用 SQLAlchemy 进行模型,并且我正在尝试集成 Alembic 来进行迁移。当我更改模型时,一切都按预期工作,并且 Alembic 看到模型已更改 -> 它使用命令创建良好的迁移文件:
alembic revision --autogenerate -m "model changed"
但是当我没有更改模型中的任何内容并且我使用相同的命令时:
alembic revision --autogenerate -m "should be no migration"
revision 给了我“空”修订文件,如下所示:
"""next
Revision ID: d06d2a8fed5d
Revises: 4461d5328f57
Create Date: 2021-12-02 18:09:42.208607
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'd06d2a8fed5d'
down_revision = '4461d5328f57'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end …Run Code Online (Sandbox Code Playgroud) 我正在尝试为基于模型的表创建多个(即2列索引)。但我不想给出这个索引的具体名称。我想要这样naming_convention,并且alembic revision --autogenerate会通过命名索引来完成它的工作。到目前为止我有这样的代码:
from sqlalchemy import MetaData
from sqlalchemy.ext.declarative import as_declarative
from sqlalchemy.schema import Index
metadata = MetaData(
naming_convention={
'pk': '%(table_name)s_pk',
'ix': '%(table_name)s_%(column_0_N_name)s_ix',
},
)
@as_declarative(metadata=metadata)
class Base:
pass
class Foo(Base):
id = Column(Integer, primary_key=True)
col1 = Column('Col1', Integer)
col2 = Column('Col2', DateTime)
Index(
metadata.naming_convention['ix'] % {
'table_name': Foo.__tablename__,
'column_0_N_name': Foo.col1.expression.name + "_" + Foo.col2.expression.name
},
Foo.col1,
Foo.col2,
)
Run Code Online (Sandbox Code Playgroud)
所以我想避免代码的“创建名称”部分:
metadata.naming_convention['ix'] % {
'table_name': Foo.__tablename__,
'column_0_N_name': Foo.col1.expression.name + "_" + Foo.col2.expression.name
}
Run Code Online (Sandbox Code Playgroud)