7 votes

Définir une limite d'index dans SQLAlchemy

J'aimerais définir une limite maximale pour un index dans le cadre d'une Column ou simplement par le biais de la Index mais je n'arrive pas à trouver le moyen de le faire.

En gros, je voudrais simuler ce comportement de 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;

Dans SQLAlchemy j'aurais quelque chose comme :

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

mais je ne trouve rien qui suggère que la limite de l'indice puisse être personnalisée. Quelque chose comme :

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

Je suppose que puisque cette option pour le Column est juste un alias pour le constructeur Index existe-t-il un paramètre personnalisé à inclure dans le constructeur de la Index pour permettre ce réglage ?

Merci !

11voto

pcalessio Points 131

Je pense que tu peux faire quelque chose comme :

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

Référence : http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#index-length

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X