자동 증가하는 속성으로 사용자 정의 논리에서의 정밀한 웹 애플리케이션을 빨리 빌

StackOverflow https://stackoverflow.com/questions/1038126

문제

내가 있는 간단한"송장"등을"수는"속성이 있는 에 할당할 때 응용 프로그램에 의해 사용자가 저장됩니다.가 은 일부 제약 조건:

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"으로 값의 번호,청구서 인스턴스 을 얻 업데이트와 함께 새로운 수 있습니다.정상입니까?나는 뭔가?에 대 한 많은 감사는 시간!

(SQLA0.5.3 에 Python2.6 를 사용하여,postgreSQL8.3)

편집: 마이클 바이엘 나에게 말했다는 이 행동은 예상되기 때문 TypeDecorators 를 다루지 않는 기본값으로 되돌릴 수 있습니다.

도움이 되었습니까?

해결책

는 특별한 이유가 있나 당신은 단지 사용 default= 매개 변수에 정의 열?(이할 수 있는 임의의 Python 가능).

def generate_invoice_number():
    # special logic to generate a unique invoice number

class Invoice(DeclarativeBase):
    __tablename__ = 'invoice'
    number = Column(Integer, unique=True, default=generate_invoice_number)
    ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top