我以爲我明白這一點,但我開始懷疑!ZODB/repoze.catalog - 將對象和目錄保存在同一數據庫中?
如果考慮repoze.catalog doco example:
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