2016-09-30 109 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