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'))