Sự khác biệt chính là trong khi Chỉ mục API
cho phép xác định chỉ mục bên ngoài định nghĩa bảng miễn là nó có thể tham chiếu bảng thông qua các cấu trúc SQL được truyền vào, UniqueConstraint
và các ràng buộc nói chung phải được xác định nội tuyến trong định nghĩa bảng
:
Điều cần hiểu là trong quá trình xây dựng một lớp khai báo, một Bảng
mới được xây dựng, nếu không được thông qua một __table__
rõ ràng . Trong lớp mô hình mẫu của bạn, UniqueConstraint
thể hiện được liên kết với một thuộc tính lớp, nhưng cơ sở khai báo không bao gồm các ràng buộc trong Bảng
đã tạo ví dụ từ các thuộc tính. Bạn phải chuyển nó vào các đối số của bảng:
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'),
)
Lưu ý rằng bạn phải chuyển tên ràng buộc làm đối số từ khóa. Bạn cũng có thể vượt qua ràng buộc bằng cách sử dụng Table.append_constraint ()
, nếu được gọi trước bất kỳ nỗ lực tạo bảng nào:
class MyTable(DeclBase):
...
MyTable.__table__.append_constraint(
UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))