ZODB损坏实例



我正在尝试使用仅ZODB来持久化对象引用in aFileStorage数据库。我做了一个测试来分析它的性能,但是对象在加载时似乎是坏的。

测试包括:

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

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

提前谢谢你。

我认为你看到的问题是因为zodb2.py不知道zodb1.py中定义的Instrument类。

我猜,如果你把你的类移动到一个单独的模块,并在zodb1zodb2中导入它,你不会看到一个破碎的对象。

最新更新