2016-09-30 111 views
5

我想爲Column定義中的索引或通過Index構造函數設置索引的最大限制,但我似乎找不到實現它的方法。在SQLAlchemy中設置索引限制

基本上,我想模仿這個MySQL行爲:

CREATE TABLE some_table (
    id int(11) NOT NULL AUTO_INCREMENT, 
    some_text varchar(2048) DEFAULT NULL, 
    PRIMARY KEY (id), 
    KEY some_text (some_text(1024)), # <- this line 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED; 

在SQLAlchemy中我會是這樣的:

class SomeTable(BaseModel): 
    __tablename__ = 'some_table' 
    __seqname__ = 'some_table_id_seq' 

    id = sa.Column(sa.Integer(11), sa.Sequence(__seqname__), primary_key=True) 
    some_text = sa.Column(sa.String(2048), index=True) # <- this line 

,但我無法找到任何建議的限制該指數可以定製。喜歡的東西:

some_text = sa.Column(sa.String(2048), index=True, index_length=1024) 

我想因爲這個選項對於Column構造僅僅是一個別名Index構造,有一個自定義PARAM在Index構造包括允許該設置嗎?

謝謝!

+0

如果一定要「字頭」的索引,你可能也使長度足夠長的時間,以通常分辨行。 (1024個氣味過多。) –

回答

8

我認爲你可以這樣做:

class SomeTable(BaseModel): 
    __tablename__ = 'some_table' 
    __seqname__ = 'some_table_id_seq' 
    __table_args__ = (
     sa.Index("idx_some_text", "some_text", mysql_length=1024), 
) 
    id = sa.Column(sa.Integer(11), sa.Sequence(__seqname__), primary_key=True) 
    some_text = sa.Column(sa.String(2048)) 

參考: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#index-length

+0

沒錯,那可行!謝謝@pcalessio – eberbis