La principale différence est que si l'Index
API
permet de définir un index en dehors d'une définition de table tant qu'il peut référencer la table via les constructions SQL transmises, un UniqueConstraint
et les contraintes en général doit être défini en ligne dans la définition de table
:
La chose à comprendre est que lors de la construction d'une classe déclarative une nouvelle Table
est construit, s'il n'est pas passé un __table__
explicite . Dans votre exemple de classe de modèle, le UniqueConstraint
l'instance est liée à un attribut de classe, mais la base déclarative n'inclut pas de contraintes dans la Table
créée instance à partir d'attributs. Vous devez le passer dans les arguments du tableau :
class MyTable(DeclBase):
__tablename__ = 'my_table'
...
# A positional argument tuple, passed to Table constructor
__table_args__ = (
UniqueConstraint(attr_2, attr_3, name='my_table_uidx'),
)
Notez que vous devez passer le nom de la contrainte en tant qu'argument mot-clé. Vous pouvez également passer la contrainte en utilisant Table.append_constraint()
, s'il est appelé avant toute tentative de création de la table :
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))