Der Hauptunterschied besteht darin, dass der Index
API
ermöglicht das Definieren eines Index außerhalb einer Tabellendefinition, solange er die Tabelle durch die übergebenen SQL-Konstrukte referenzieren kann, ein UniqueConstraint
und Einschränkungen im Allgemeinen muss inline in der Tabellendefinition definiert werden
:
Zu verstehen ist, dass während der Konstruktion einer deklarativen Klasse eine neue Tabelle
entsteht wird konstruiert, wenn kein expliziter __table__
übergeben wird . In Ihrer Beispielmodellklasse die UniqueConstraint
Die Instanz ist an ein Klassenattribut gebunden, aber die deklarative Basis enthält keine Einschränkungen in der erstellten Tabelle
Instanz aus Attributen. Sie müssen es in den Tabellenargumenten übergeben:
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'),
)
Beachten Sie, dass Sie den Einschränkungsnamen als Schlüsselwortargument übergeben müssen. Sie können die Einschränkung auch mit Table.append_constraint()
, falls vor jedem Versuch, die Tabelle zu erstellen, aufgerufen wird:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))