SQLAlchemy-根据方言不同编译索引



我有一个类似的SQLAlchemy类:

class TableName(Base):
__table_args__ = ( 
Index('index_name', 'column_name'), 
)

我希望索引的名称根据方言进行不同的编译,因为据我所知,MySQL可以编译具有相同名称的索引,只要它们位于不同的表中,而Sqlite要求每个索引都有一个唯一的名称。我们有一些表对mysql使用相同的索引名称,我希望它编译到sqlite进行测试。这可能吗?还是我因为其他原因感到困惑?

我需要编译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)

最新更新