python-3.x ZODB中断的示例

f8rj6qna  于 2022-11-19  发布在  Python
关注(0)|答案(1)|浏览(129)

我正在尝试在FileStorage数据库中仅使用ZODB持久化对象引用。我进行了测试以分析其性能,但对象在加载时似乎已损坏。

测试包括:

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

zodb1.py

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

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的文档,我没有看到其他配置过程或其他方法来实现这一点。
先谢谢你了。

k2arahey

k2arahey1#

我认为您看到的问题是因为zodb2.py不知道zodb1.py中定义的Instrument类。
我猜想,如果您将类移到一个单独的模块中,并将其导入到zodb1zodb2中,您将不会看到一个损坏的对象。

相关问题