문제

파이썬 스레드 응용 프로그램 + Postgres가 있습니다. 나는 postgres에 저장하기 위해 django의 orm을 사용하고 있습니다 ..
동시에 저장 전화가 있습니다. 때로는 2 개의 스레드가 동일한 기본 키로 저장되어 문제가 발생합니다.

Postgres 로그 :
오류 : 중복 키 값은 고유 한 제약 조건 "Store_pkey"를 위반합니다.
명령문 : "Store"( "Store_id", "Address") 값 (E'Han277 ', E'101 Ocean Street”에 삽입

암호:
코드에서는 integrityError가 나타납니다. 나는 이것을 처리하기 위해 다른 방법을 시도했다.

ㅏ.
노력하다:
a.save ()
IntegrityError를 제외하고 :
통과하다

이로 인해 내부 오류가 발생합니다

비. 트랜잭션 롤백을 시도했지만 확실하지 않습니다. 내가 이해하는 한, 거래를 위해 전화를 구별해야합니다.

      sid = transaction.savepoint()
      try:
        row.save()
      except IntegrityError, e:
        transaction.savepoint_rollback(sid)
        pass
      transaction.commit()

첫 번째 저장 포인트가 실패합니다

AttributeError : 'Nonetype'객체는 속성이 없습니다 'Cursor'

ㅏ. 나는 Django가 100% 스레드 안전하지 않은 곳을 읽었습니다. USECASE에서 좋은 선택입니까? 나는 이미 다른 응용 프로그램에 django를 사용하고 있었고 orm이 필요합니다 .. 그래서 자연스럽게 나는 django를 선택했습니다.
비. 이 상황을 처리하는 방법 .. 모든 의견.

감사합니다

도움이 되었습니까?

해결책

내가 올바르게 이해하면 기본 키에 문자열을 사용하고 있습니까?

AttributeError : 'Nonetype'객체는 속성이 없습니다 'Cursor'

이것은 일부 파이썬 코드에 오류가 있음을 의미합니다. Django의 다른 버전이나 개정판을 사용하거나 버그에 대한 Django Trac을 검색해 보셨습니까? 트렁크에서 버전을 사용하는 경우 버그의 영향을받는 것은 드문 일이 아닙니다.

대안으로 옵션 인 경우 여러 스레드 대신 여러 프로세스를 사용하여 Django를 배포하려고 할 수도 있습니다.

그러나 다른 버그를 발견 할 수 있으므로 중복 요청을받는 이유를 여전히 알고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top