Het belangrijkste verschil is dat terwijl de Index
API
staat het definiëren van een index toe buiten een tabeldefinitie zolang deze naar de tabel kan verwijzen via de doorgegeven SQL-constructies, a UniqueConstraint
en beperkingen in het algemeen moet inline worden gedefinieerd in de tabeldefinitie
:
Het ding om te begrijpen is dat tijdens de constructie van een declaratieve klasse een nieuwe Table
is geconstrueerd, indien niet een expliciete __table__
. doorgegeven . In uw voorbeeldmodelklasse is de UniqueConstraint
instantie is gebonden aan een klassekenmerk, maar de declaratieve basis bevat geen beperkingen in de gemaakte Table
instantie van attributen. U moet het doorgeven in de tabelargumenten:
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'),
)
Houd er rekening mee dat u de naam van de beperking moet doorgeven als een trefwoordargument. U kunt de beperking ook doorgeven met Table.append_constraint()
, indien aangeroepen vóór pogingen om de tabel aan te maken:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))