gpt4 book ai didi

python - ZODB/repoze.catalog - 将对象和目录保存在同一数据库中?

转载 作者:行者123 更新时间:2023-11-30 23:39:52 26 4
gpt4 key购买 nike

我以为我理解了这一点,但我开始怀疑!

如果您考虑 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 为键的对象,用于在 repoze.catalog 下对它们进行编目,但是当涉及到事务时,这不太令人满意,因为在添加对象时我必须发出对用于存储对象的目录和 ZODB 数据库进行提交。

我曾假设我能够访问 repoze.catalog 结构内的 ZODB 目录并使用它来存储实际对象,但我很难找到如何做到这一点。

最佳答案

repoze.catalog这样的目录旨在索引内容,而不是存储内容。其目的是通过对内容的某些方面建立索引,使查找(存储在其他地方)的内容变得简单且高效。

给出的示例是完全独立的,并将其数据存储在单独的 ZODB 文件中。这是为了支持目录用于存储本身存储在 ZODB 中的数据的用例。

但是,您可以将目录存储在存储内容的同一 ZODB 中。您的内容对象应遵循 basic rules for persistent objects ,但您可以自由地构建存储结构。

要为自己创建一个 repoze.catalog 目录,而不是使用提供的 FileStorageCatalogFactory,只需实例化 repoze.catalog.catalog.Catalog:

from repoze.catalog.catalog import Catalog

if 'mycatalog' not in zodbroot:
zodbroot['mycatalog'] = Catalog()

关于python - ZODB/repoze.catalog - 将对象和目录保存在同一数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com