나는 이것을 이해할 줄 알았지 만 나는 궁금해지기 시작했다! 당신이 생각하는 경우ZODB/repoze.catalog - 동일한 데이터베이스에 개체와 카탈로그 저장?
from repoze.catalog.catalog import FileStorageCatalogFactory
from repoze.catalog.catalog import ConnectionManager
from repoze.catalog.indexes.field import CatalogFieldIndex
from repoze.catalog.indexes.text import CatalogTextIndex
factory = FileStorageCatalogFactory('catalog.db', 'mycatalog')
_initialized = False
def initialize_catalog():
global _initialized
if not _initialized:
# create a catalog
manager = ConnectionManager()
catalog = factory(manager)
# set up indexes
catalog['flavors'] = CatalogFieldIndex('flavor')
catalog['texts'] = CatalogTextIndex('text')
# commit the indexes
manager.commit()
manager.close()
_initialized = True
class Content(object):
def __init__(self, flavor, text):
self.flavor = flavor
self.text = text
if __name__ == '__main__':
initialize_catalog()
manager = ConnectionManager()
catalog = factory(manager)
content = {
1:Content('peach', 'i am so very very peachy'),
2:Content('pistachio', 'i am nutty'),
}
for docid, doc in content.items():
catalog.index_doc(docid, doc)
manager.commit()
이 어떻게 컨텐츠 클래스의 두 인스턴스에 대한 카탈로그 항목을 생성 할 수 있지만 실제로 객체를 저장하기위한 정확한 메커니즘은 무엇인가 보여?
나는 완전히 분리 된 ZODB 데이터베이스를 가지고 있는데,이 객체는 repoze.catalog 아래에 카탈로그를 만드는 데 사용 된 docid에 키가있는 객체를 저장하기 시작했다.하지만 트랜잭션을 처리 할 때 객체를 추가 할 때 만족스럽지 않기 때문에 개체를 저장하는 데 사용되는 ZODB 데이터베이스와 카탈로그 모두에서 커밋을 실행하십시오.
나는 repoze.catalog 구조 내에있는 ZODB 카탈로그에 액세스하여 실제 객체를 저장하는 데 사용할 수 있다고 가정했지만 실제로 수행하는 방법을 찾는 데 어려움이 있습니다.
이었다; transaction.get(). commit()은 모든 트랜잭션 관리자 (이 경우 모든 ZODB 데이터베이스)에 변경 사항을 적용합니다. – sdupton
나는 적절하게 생각하지 못했습니다. 당신이 저에게 해보라고했는데, 정말 고마워했습니다. – shearichard