SQLAlchemy基于继承的表键在mixin中添加索引?

时间:2012-07-12 06:50:26

标签: indexing sqlalchemy mixins

在SQLAlchemy中,我想定义一个在继承表中自动创建索引的mixin。

假设继承表有一个名为'keys'的成员列表,我希望mixin在继承表中为keys中列出的列创建一个多列索引。但是,在创建表之前,mixin不知道键是什么!

我该怎么做?

1 个答案:

答案 0 :(得分:2)

示例:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy import MetaData, Column, Index, Integer

metadata = MetaData()
Base = declarative_base(metadata=metadata)


class MyMixin(object):

    @declared_attr
    def __table_args__(cls):
        return (Index('test_idx_%s' % cls.__tablename__, *cls.INDEX),)


class MyModel(MyMixin, Base):
    __tablename__ = 'atable'
    INDEX = ('a', 'b',)
    id = Column(Integer, primary_key=True)
    a = Column(Integer)
    b = Column(Integer)
    c = Column(Integer)


if __name__ == '__main__':
    from sqlalchemy import create_engine
    engine = create_engine('sqlite:///', echo=True)
    metadata.bind = engine
    metadata.create_all() 

文档:Combining Table/Mapper Arguments from Multiple Mixins