2012-07-31 1 views
0

:SQLAlchemy의 : 문자열 기능 CheckConstraint이 방법으로 sqlalchemy.schema.CheckConstraint를 사용하려고

themes2tags_table = Table('themes2tags', Base.metadata, 
    Column('theme_id', String(32), ForeignKey('tags.id')), 
    Column('tag_id', String(32), ForeignKey('tags.id')), 
    PrimaryKeyConstraint(['theme_id', 'tag_id']), 
    CheckConstraint("substr(theme_id,1,1)='3'")) 

(의미 다 대다 태그 테이블에와 테마 미리 정의 된 접두어 태그입니다 그 자기 참조 관계 , 분명히) 무엇이 끝나는 지

...CheckConstraint("substr(theme_id,1,1)='3'") 
    File "build\bdist.win32\egg\sqlalchemy\schema.py", line 303, in __new__ 
    File "build\bdist.win32\egg\sqlalchemy\schema.py", line 370, in _init 
    File "build\bdist.win32\egg\sqlalchemy\schema.py", line 64, in _init_items 
    File "build\bdist.win32\egg\sqlalchemy\events.py", line 234, in _set_parent_wi 
th_dispatch 
    File "build\bdist.win32\egg\sqlalchemy\schema.py", line 2133, in _set_parent 
    File "build\bdist.win32\egg\sqlalchemy\schema.py", line 1909, in _set_parent 
    File "build\bdist.win32\egg\sqlalchemy\schema.py", line 1883, in _set_parent 
    File "build\bdist.win32\egg\sqlalchemy\sql\expression.py", line 2213, in add 
AttributeError: 'list' object has no attribute 'key' 

여기서 내가 틀린가? 이러한 상황에서 그러한 제약을 가질 수 있습니까?

현재 백엔드는 sqlite이지만 향후 Postgres 로의 이전을 고려하므로 덜 일반적인 영수증을 찾습니다.

UPD : SQLAlchemy의 0.7.5

+0

어떤 SQLAlchemy 버전입니까? 어쨌든 0.7.8이 아닙니다. –

답변

1

글쎄, 그건하지만 사실, 잘못된 오류 메시지에 따라, 내 잘못이었다. 그것은 알고 보니, 실제 오류가 이전 라인에 있던, 즉 올바른 구문은 다음과 같습니다 PrimaryKeyConstraint의 목록 정의하기 전에 그 별표에

themes2tags_table = Table('themes2tags', Base.metadata, 
    Column('theme_id', String(32), ForeignKey('tags.id')), 
    Column('tag_id', String(32), ForeignKey('tags.id')), 
    PrimaryKeyConstraint(*['theme_id', 'tag_id']), 
    CheckConstraint("substr(theme_id,1,1)='3'")) 

주의하십시오.

+3

간단한 키 작성 방법은 PrimaryKeyConstraint ('theme_id', 'tag_id')입니다. –

+0

아, 물론, Wichert, 나에게 수치! ;) –