반응형
위치를 나타내는 클래스가 있다고 가정 해 보겠습니다. 위치는 고객에게 "속한다". 위치는 유니 코드 10 자 코드로 식별됩니다. "위치 코드"는 특정 고객의 위치간에 고유해야합니다.
The two below fields in combination should be unique
customer_id = Column(Integer,ForeignKey('customers.customer_id')
location_code = Column(Unicode(10))
두 명의 고객이 있다면 고객 "123"과 고객 "456"입니다. 둘 다 "main"이라는 위치를 가질 수 있지만 둘 다 main이라는 두 위치를 가질 수 없습니다.
비즈니스 로직에서이를 처리 할 수 있지만 sqlalchemy에 요구 사항을 쉽게 추가 할 수있는 방법이 없는지 확인하고 싶습니다. unique = True 옵션은 특정 필드에 적용될 때만 작동하는 것으로 보이며 전체 테이블이 모든 위치에 대해 고유 한 코드 만 갖도록합니다.
해결 방법
unique – True이면이 열에 고유 한 constraint, or if index is True as well, indicates that the Index should be created with the unique flag. To specify multiple columns in the constraint/index or to specify an explicit name, use the
이들은 매핑 된 클래스가 아니라 테이블에 속하므로 테이블 정의에서 선언하거나 __ table_args __
에서와 같이 선언적을 사용하는 경우 다음과 같이 선언합니다.
# version1: table definition
mytable = Table('mytable', meta,
# ...
Column('customer_id', Integer, ForeignKey('customers.customer_id')),
Column('location_code', Unicode(10)),
UniqueConstraint('customer_id', 'location_code', name='uix_1')
)
# or the index, which will ensure uniqueness as well
Index('myindex', mytable.c.customer_id, mytable.c.location_code, unique=True)
# version2: declarative
class Location(Base):
__tablename__ = 'locations'
id = Column(Integer, primary_key = True)
customer_id = Column(Integer, ForeignKey('customers.customer_id'), nullable=False)
location_code = Column(Unicode(10), nullable=False)
__table_args__ = (UniqueConstraint('customer_id', 'location_code', name='_customer_location_uc'),
)
참조 페이지 https://stackoverflow.com/questions/10059345
반응형
'파이썬' 카테고리의 다른 글
파이썬에서 문자열의 일부를 바꾸시겠습니까? (0) | 2021.02.21 |
---|---|
파이썬 컬렉션의 항목 액세스. 인덱스 별 OrderedDict (0) | 2021.02.21 |
파이썬 바이트 문자열 대 유니 코드 문자열. 파이썬 (0) | 2021.02.20 |
파이썬을 사용하여 CPU 수를 찾는 방법 (0) | 2021.02.20 |
파이썬 글꼴 및 색상이있는 Python 표시 텍스트? (0) | 2021.02.20 |
댓글