2013-01-03 4 views
0

아주 간단한 senario : 나는 고유 한 이메일을 유지하면서 그 이름에 의해 ZODB의 사용자 인스턴스를 저장할고유 키/속성/프로퍼티 ZODB에

class User(Persistent): 
    def __init__(self, username, email): 
    self.username = username 
    self.email = email 

.

u1 = User(username="u1",email="[email protected]") 
zodb_container[u1.username] = u1 

이 개체를 저장하기 위해 사용자 이름을 키로 사용하므로 고유합니다. 내 질문은 전자 메일 특성을 고유하게 유지하는 방법입니까? 객체 데이터베이스에서이를 수행하는 우아한 방법이 있습니까?

답변

2

ZODB 다소 잘못된 이름이다. Postgres와 같은 "데이터베이스"나 MySQL은 제약 조건과 쿼리 언어가있는 데이터베이스와 사람들이 데이터베이스를 가지고 있다고 생각하는 모든 것들입니다. 대신 영구 객체 저장소입니다. Python의 pickle 모듈은 사용 가능한 메모리보다 크고 트랜잭션을 처리하고 프로세스간에 객체 표현을 공유 할 수 있다는 점을 제외하면 Python의 pickle 모듈은 사용자를 대신하지 않습니다. 그것은 사실상 "superpickle"입니다.

당신의 대답은 피클에 대해 같은 질문을했을 때와 다를 바 없습니다.

+0

안녕하세요, Chris, 정말 고마워요! 그런 요구 사항을 충족시킬 때, 어떻게 해결하는지, 그리고 권장되는 방법이 무엇인지 궁금합니다. 지금 당장 두 가지 옵션이 있습니다 : 1, ZODB를 실제 관계형 데이터베이스와 결합하십시오. 2, ZODB에 다른 사전을 생성하고 이메일 주소를 키로 사용하십시오. 따라서 사용자 이름과 이메일 주소를 모두 고유하게 유지하는 두 개의 사전을 유지합니다. – Xiong

+0

두 번째 옵션을 선택한다고 가정 할 때 또 다른 질문이 있습니다. 동일한 사용자 개체를 두 개의 사전에 두 번 저장하면 ZODB는 해당 사용자 개체의 복사본을 두 개 또는 복사본 하나만 보관할 것입니까? ZODB가 두 개의 복사본을 유지한다면 전체 User 객체 대신에 키 (User.username)를 저장해야합니다. BTW, 나는 곧 실험을 하는게 좋을 것 같아. – Xiong

+0

ZODB는 사용자 개체의 복사본 하나만 유지합니다. 그래서 두 속성을 모두 고유하게 유지하기 위해 두 개의 사전을 사용할 것입니다. – Xiong

관련 문제