mmw*_*way 0 indexing sqlalchemy alembic
我正在尝试为基于模型的表创建多个(即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)
经过更多搜索后,有一个非常简单的解决方案。根据SQLAlchemy 问题中的 github 评论,如果您想创建索引,Index()只需传递name=None参数并填充列的参数。
所以上面的代码应该看起来像(保持不变的部分):
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
Run Code Online (Sandbox Code Playgroud)
选项1(在表模型外声明多列索引)
class Foo(Base):
id = Column(Integer, primary_key=True)
col1 = Column('Col1', Integer)
col2 = Column('Col2', DateTime)
Index(None, Foo.col1, Foo.col2)
Run Code Online (Sandbox Code Playgroud)
选项2(在表模型内声明多列索引)
class Foo(Base):
id = Column(Integer, primary_key=True)
col1 = Column('Col1', Integer)
col2 = Column('Col2', DateTime)
__table_args__ = (
Index(None, 'Col1', 'Col2'),
)
Run Code Online (Sandbox Code Playgroud)
那么索引名称(在两个选项中)将是:
Foo_Col1_Col2_ix
Run Code Online (Sandbox Code Playgroud)
我还没有在 SQLALchemy 文档中找到这种解决方案(也许有?),但很高兴在 SQLAlchemy github 中的 github 问题上有一些答案:)
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |