首页
学习
活动
专区
圈层
工具
发布

ZODB破例
EN

Stack Overflow用户
提问于 2022-07-07 14:06:59
回答 1查看 20关注 0票数 0

我试图使用(仅使用ZODB )在FileStorage数据库中持久化对象引用。我做了一个测试来分析它的性能,但是当它被加载时,它似乎被破坏了。

测试由:组成

  1. 在一个脚本中创建一个对象并将其写入数据库。
  2. 在另一个脚本中,从同一个数据库读取该对象并在那里使用它。

来自CMD的zodb1.py图像

来自CMD的zodb2.py图像

zodb1.py

代码语言:javascript
复制
import ZODB
from ZODB.FileStorage import FileStorage
import persistent
import transaction

storage = FileStorage('ODB.fs')
db = ZODB.DB(storage)
connection = db.open()
ODB = connection.root()

print(ODB)

class Instrument(persistent.Persistent):

    def __init__(self, name, address):
        self.name = name
        self.address = address
    
    def __str__(self):
        return f'Instrument - {self.name}, ID: {self.address}'

camera = Instrument(name='Logitech', address='CAM0')


ODB['camera'] = camera
ODB._p_changed = True
transaction.commit()

print(ODB)

ob = ODB['camera']
print(ob)
print(dir(ob))

zodb2.py

代码语言:javascript
复制
import ZODB, ZODB.FileStorage
import persistent
import transaction

connection = ZODB.connection('ODB.fs')

ODB = connection.root()

print(ODB)

ob = ODB['camera']
print(ob)
print(dir(ob))

我错过了什么重要的事情吗?我已经阅读了ZODB的文档,我没有看到其他的配置过程,也没有看到其他方法来实现这一点。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-11-14 16:12:28

我认为您看到的问题是因为zodb2.py不了解在zodb1.py中定义的Instrument类。

我想,如果您将类移动到一个单独的模块中,并将其导入zodb1zodb2中,您将不会看到一个破碎的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72899290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档