Hlavní rozdíl je v tom, že zatímco Index API
umožňuje definovat index mimo definici tabulky, pokud může odkazovat na tabulku prostřednictvím předávaných konstrukcí SQL, UniqueConstraint
a obecně omezení musí být definováno přímo v definici tabulky
:
Je třeba porozumět tomu, že během konstrukce deklarativní třídy se vytvoří nová Tabulka
je vytvořen, pokud není předán explicitní __table__
. Ve vaší ukázkové třídě modelu UniqueConstraint
instance je vázána na atribut třídy, ale deklarativní základ nezahrnuje omezení ve vytvořené tabulce
instance z atributů. Musíte jej předat v argumentech tabulky:
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'),
)
Všimněte si, že musíte předat název omezení jako argument klíčového slova. Omezení můžete také předat pomocí Table.append_constraint()
, pokud je zavoláno před jakýmkoli pokusem o vytvoření tabulky:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))