在SQLAlchemy中设置索引限制

ebe*_*bis 6 python mysql indexing sqlalchemy

我想在Column定义中或通过Index构造函数设置索引的最大限制,但我似乎没有找到实现它的方法.

基本上,我想模拟这种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;
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

但我找不到任何可以定制索引限制的内容.就像是:

some_text = sa.Column(sa.String(2048), index=True, index_length=1024)
Run Code Online (Sandbox Code Playgroud)

我想因为Column构造函数的这个选项只是构造函数的别名Index,是否有一个自定义参数包含在Index构造函数中以允许此设置?

谢谢!

小智 9

我想你可以这样做:

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))
Run Code Online (Sandbox Code Playgroud)

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