2012-07-12 33 views
0

在SQLAlchemy中,我想定義一個mixin,它會自動在繼承表中創建一個索引。SQLAlchemy基於繼承的表鍵在mixin中添加索引?

假設繼承表有一個名爲'keys'的成員列表,我希望mixin在繼承表中創建一個多列索引,而不是在鍵中列出的列中。但是,在創建表之前,mixin不知道密鑰是什麼。

我該怎麼做?

回答

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