Perbedaan utama adalah bahwa sementara Index API
memungkinkan mendefinisikan indeks di luar definisi tabel selama dapat mereferensikan tabel melalui konstruksi SQL yang diteruskan, UniqueConstraint
dan batasan secara umum harus didefinisikan sebaris dalam definisi tabel
:
Hal yang perlu dipahami adalah bahwa selama konstruksi kelas deklaratif sebuah Table . baru dibangun, jika tidak lulus __table__ eksplisit . Di kelas model contoh Anda, UniqueConstraint instance terikat ke atribut kelas, tetapi basis deklaratif tidak menyertakan batasan dalam Table yang dibuat contoh dari atribut. Anda harus meneruskannya dalam argumen tabel:
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'),
)
Perhatikan bahwa Anda harus meneruskan nama batasan sebagai argumen kata kunci. Anda juga dapat melewati batasan menggunakan Table.append_constraint()
, jika dipanggil sebelum ada upaya untuk membuat tabel:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))