Den största skillnaden är att medan Index API
tillåter att definiera ett index utanför en tabelldefinition så länge det kan referera till tabellen genom de godkända SQL-konstruktionerna, en UniqueConstraint
och begränsningar i allmänhet måste definieras inline i tabelldefinitionen
:
Saken att förstå är att under konstruktionen av en deklarativ klass en ny Table
är konstruerad, om den inte passerats en explicit __tabell__
. I din exempelmodell klassificerar du UniqueConstraint
instans är bunden till ett klassattribut, men den deklarativa basen inkluderar inte begränsningar i den skapade tabellen
instans från attribut. Du måste skicka det i tabellargumenten:
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'),
)
Observera att du måste skicka begränsningsnamnet som ett nyckelordsargument. Du kan också skicka begränsningen med Table.append_constraint()
, om den anropas innan några försök att skapa tabellen:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))