我以为我明白这一点,但我开始怀疑了!在
如果考虑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()
这向您展示了如何为Content类的两个实例生成目录项,但是实际保存对象的正确机制是什么?在
我一开始有一个完全独立的ZODB数据库,我将键入docid的对象存储在这个数据库中,这些对象用于对它们进行分类寄存目录但当涉及到事务时,这并不令人满意,因为在添加对象时,我必须对目录和用于存储对象的ZODB数据库发出提交。在
我假设我可以访问ZODB目录,它位于寄存目录结构并使用它来存储实际的对象,但我很难找到如何做到这一点。在
像
repoze.catalog
这样的目录用于索引内容,而不是存储内容。它的目的是通过索引内容的某些方面,使查找(存储在其他地方的)内容变得容易和高效。在给出的示例是完全独立的,并将其数据存储在单独的ZODB文件中。这是为了支持这样的用例:目录用于存储在ZODB中的本身而不是的数据。在
但是,您可以在存储内容的同一个ZODB中存储目录。您的内容对象应该遵循basic rules for persistent objects,但是您可以自由设计存储结构。在
要为自己创建一个
repoze.catalog
目录,而不是使用提供的FileStorageCatalogFactory
,只需实例化repoze.catalog.catalog.Catalog
:相关问题 更多 >
编程相关推荐