2016-09-30 13 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コンストラクタの単なる別名であるため、私は推測し、この設定を許可するようにIndexコンストラクタに含めるカスタムparamがありますか?

ありがとうございます!

+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

関連する問題