2012-06-17 2 views
2

나는 다음과 같은 클래스가 말SQLAlchemy의 고유 한 객체

이미
  1. 문자열이 할 자신의 존재를 확인하고 개체를 만드는 사이에 다른 곳
  2. 존재, 그들은 이미 다른 프로세스에 의해 생성되지 않았습니다.

나는이 문제를 처음 접한 사람이 될 수 없다는 것을 알고 있지만, 이것에 관해 많이 알지 못했습니다. SQLAlchemy가 실제로 unique을 시행하지 않아서 어떻게해야할지 모르겠습니다. 감사.

답변

1

충돌의 가능성이 매우 낮고 매우 낮습니다.

임의의 문자열이 대문자와 숫자로만 구성되어 있다고 가정 해 보겠습니다. 문자 당 36 가지 가능성이 있습니다. 공개 키의 16자를 사용하면 36 개의 조합을 얻을 수 있습니다. 그 후 24 초가 지나면 약 8입니다. 데이터베이스에 백만 개의 키가 있더라도 새 키를 추가 할 때 충돌 가능성은 10^-19입니다.

나는 그것에 대해 걱정하지 않을 것입니다. 나는 그렇지 않고 내가 사용하는 무작위 값 (대부분 UUID4)은 충돌 가능성이 훨씬 높습니다. (그러나 여전히 천문학적으로 낮습니다.)

여전히 걱정된다면 : SQLAlchemy는 UNIQUE을 적용하지 않을 수도 있지만 DBMS가 있어야합니다. 즉, UNIQUE 제약 조건을 위반하면 SQLAlchemy가 예외를 throw합니다. 예외를 잡아서 우아하게 저하시킬 수 있습니다.

+0

감사합니다. 파이썬의 [무작위] (http://docs.python.org/library/random.html) 라이브러리로 충분합니까? 난 그냥 난수 생성기가 충돌을 일으킬 것이라고 걱정. 사용할 수있는 더 나은 라이브러리가 있습니까? – Mark

+1

나는 내 자신의 질문에 대답했다. 충돌없이 10,000,000 개의 64 바이트 문자열을 생성 했으므로 매우 만족합니다. 감사. – Mark