2016-09-30 62 views
5

bir dizin sınırı ayarlama Column tanımında veya yalnızca Index yapıcı aracılığıyla bir dizin için bir maksimum sınır ayarlamak istiyorum ancak bunu başarmanın bir yolunu bulmak için görünmüyor.SQLAlchemy

Temelde, bu MySQL davranışını simüle etmek istiyorum:

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; 

ben gibi bir şey olurdu sqlalchemy In:

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 

ama limitini öneririm şey bulamıyorum endeks özelleştirilebilir. gibi bir şey:

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

Ben Column yapıcısı için bu seçenek Index yapıcısı için sadece bir takma olduğundan sanırım, bu ayarı izin vermek Index yapıcı dahil etmek için bir özel param var mıdır?

Teşekkürler!

+0

sen 'öneki' bir indeks, siz de sadece yeterince uzun genellikle satırları ayırt etmek uzunluğu yapabilir gerekiyorsa . (1024 aşırı kokuyor.) –

cevap

8

ben gibi bir şey yapabileceğini düşünüyorum:

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)) 

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

+0

Doğru, işe yarıyor! Teşekkürler @pcalessio – eberbis