【问题标题】:SQLAlchemy - Compile Index Differently Depending on DialectSQLAlchemy - 根据方言以不同方式编译索引
【发布时间】:2021-12-21 14:42:01
【问题描述】:
我有一个这样的 SQLAlchemy 类:
class TableName(Base):
__table_args__ = (
Index('index_name', 'column_name'),
)
我希望索引的名称根据方言编译不同,因为据我了解,MySQL可以编译同名的索引,只要它们在不同的表中,而Sqlite要求每个索引都有一个独特的名字。我们有一些表对 mysql 使用相同的索引名称,我希望它编译为 sqlite 进行测试。这是可能的还是我出于其他原因感到困惑?
【问题讨论】:
标签:
python
mysql
sqlite
sqlalchemy
【解决方案1】:
我需要编译CreateIndex函数,并使用传入的索引和表名来创建唯一的索引名:
@compiles(CreateIndex, "sqlite")
def compile_index(element, compiler, **kw):
index_name = element.element.name
table_name = element.element.table.name
column_name = element.element.expressions[0].name
unique_index_name = f"{table_name} {index_name}"
return "CREATE INDEX \"%s\" ON %s (\"%s\")" % (unique_index_name, table_name, column_name)