Główna różnica polega na tym, że podczas gdy Indeks API
umożliwia zdefiniowanie indeksu poza definicją tabeli, o ile może odwoływać się do tabeli poprzez przekazane konstrukcje SQL, a UniqueConstraint
i ogólnie ograniczenia musi być zdefiniowany w definicji tabeli
:
Należy zrozumieć, że podczas konstruowania klasy deklaratywnej nowa Tabela
jest skonstruowany, jeśli nie zostanie przekazany jawny __table__
. W przykładowej klasie modelu UniqueConstraint
instancja jest powiązana z atrybutem klasy, ale podstawa deklaratywna nie zawiera ograniczeń w tworzonej tabeli
wystąpienie z atrybutów. Musisz go podać w argumentach tabeli:
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'),
)
Zauważ, że musisz przekazać nazwę ograniczenia jako argument słowa kluczowego. Możesz również przekazać ograniczenie za pomocą Table.append_constraint()
, jeśli zostanie wywołane przed jakąkolwiek próbą utworzenia tabeli:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))