사용자가 송장을 저장할 때 에 할당해야하는 "번호"특성을 가진 간단한 "송장"클래스가 있습니다. 일부 제약이 있습니다SQLAlchemy에서 사용자 지정 논리를 사용하여 자동 증가 특성
1) 응용 프로그램이 (얇은) 클라이언트 - 서버 하나, 그래서 어떤 이 수는 충돌
2) 송장에 "버전"너무 속성이 피려합니다 할당, 그래서 DBMS 레벨 자동 증가 필드
나는 인보이스가 저장 될 때마다 실행되는 사용자 정의 유형을 사용하여 빌드하려고합니다. process_bind_param이 None 값으로 호출 될 때마다 수를 판별하고 충돌을 피하기 위해 일종의 싱글 톤을 호출합니다. 이것은 괜찮은 해결책입니까? 어쨌든, 나는 .. 문제가 있어요 여기에 내 사용자 지정 유형입니다 :
class AutoIncrement(types.TypeDecorator):
impl = types.Unicode
def copy(self):
return AutoIncrement()
def process_bind_param(self, value, dialect):
if not value:
# Must find next autoincrement value
value = "1" # Test value :)
return value
내 문제는 바로 지금입니다 나는 그것의 번호, 송장 예를 들어 값으로 세트를 "1"송장을 저장하고 자동 증가 할 때 은이 아니며 은 새 번호로 업데이트됩니다. 예상 되나요? 내가 누락되었습니다 뭔가? 시간 내 주셔서 감사합니다. (PostgreSQL을 8.3을 사용하여 파이썬 2.6에 SQLA 0.5.3)
편집 : TypeDecorators는 기본 값으로 취급하지 않기 때문에 마이클 바이엘,이 동작이 예상된다 내게 말했다.
부탁드립니다. 부탁드립니다. 부탁드립니다. 바로 시도해 보겠습니다 :) – Joril
기본 호출 가능 함수는 DB에있는 열의 최대 값을 더한 값을 반환합니다. 고유 한 열의 오류에 의존하지 않고 경쟁 조건이 없다고 주장 할 수있는 방법이 있습니까? –
그런 경우 인라인 SQL 표현식으로 기본값을 작성하는 것이 좋습니다. 자세한 내용은 http://www.sqlalchemy.org/docs/05/metadata.html#pre-executed-and-inline-sql-expressions의 SQLAlchemy 문서 –