나는 (InnoDB를 실행하는) MySQL을 사용하고 있고, sqlalchemy를 사용하여 전체를 감쌌다. 지금, 나는 (docs 참조)slqlalchemy UniqueConstraint VS 인덱스 (unique = True)
sqlalchemy_utils.functions.create_database(...)
일반적으로 위의 기능이하도록되어 무엇을합니까 사용하여 내 데이터베이스의 변화를 생성하고 싶습니다. 유일한 예외는 유일한 색인 생성입니다.
말은,이 같은 테이블을 정의 :
## ...
# DeclBase = declarative_base()
## ...
class MyTable(DeclBase):
__tablename__ = 'my_table'
id = Column(Integer, primary_key=True)
attr_1 = Column(String(32))
attr_2 = Column(Integer, nullable=False)
attr_3 = Column(DateTime)
attr_4 = Column(
Integer,
ForeignKey('other_table.id', onupdate='CASCADE', ondelete='CASCADE'),
nullable=False
)
u_idx = UniqueConstraint(attr_2, attr_3, 'my_table_uidx')
내가 지정된 모든 열이 테이블 'MY_TABLE'을 만들 수 SQLAlchemy의를 얻을 것이다 CREATE_DATABASE 전화
. 외래 키도 제대로 설정되었지만 데이터베이스 측에서 고유 인덱스를 찾을 수는 없습니다. 나는 대신 Index (unique = True)를 사용하여 시도했다. 그래서 그 대신u_idx = UniqueConstraint(attr_2, attr_3, 'my_table_uidx')
의 내가
u_idx_1 = Index('my_table_uidx', attr_2, attr_3, unique=True)
을 넣어 내 인상이 논리적으로 비슷한 결과를 생산했다. 이번에는 sqlalchemy가 db에 고유 인덱스를 만들었습니다.
아마도 UniqueConstraint와 Index (unique = True) 사이의 차이점이나 sqlalchemy가 데이터베이스 생성을 자동화하는 방법과 관련하여 뭔가 오해하고 있습니다.
누구든지이 문제에 대해 의견을 개진 할 수 있습니까?
큰 설명! 그것은 많은 의미가 있습니다. Index ('my_table_uidx', attr_2, attr_3, unique = True) 구현을 고수하는 것에 대한 논쟁이 있습니까? 필자는 이전에 MySQL Workbench에서 수동으로 설정 한 MySQL 정의와 똑같은 MySQL 정의를 생성 했으므로 필자는 그것을 유지하는 편이 낫습니다. 또한 파이썬 측면에서 읽기 쉽도록했습니다. –
MySQL을 사용하는 경우에는 둘 중 하나를 선호 할 이유가 없습니다. 이것을 인용하지 마십시오. 그러나 고유 한 제약 조건은 고유 인덱스로 구현됩니다. 모든 데이터베이스에서 동일하게 적용되지는 않습니다. 다시 한 번 확실하게 SQL 표준에 익숙하지 않습니다. –
충분합니다. 그것은 내 직감이었습니다. 그렇지 않으면 제안하는 항목을 발견하면 게시 할 것입니다. 감사! –