我使用独立的zodbbrowser 0.11.1和ZODB3数据库。我可以很好地访问数据库但是当我将未知类型的对象插入ZODB时,浏览器只显示:
Attributes
data: {u'account-1': <persistent broken __main__.Account instance '\x00\x00\x00\x00\x00\x00\x00\x01'>,
u'account-2': <persistent broken __main__.Account instance '\x00\x00\x00\x00\x00\x00\x00\x01'>
}
我希望看到来自__repr __(或__str__)的格式化打印输出。 帮助中pypi上的简短用户指南!到处都是破碎的对象建议确保您的应用程序对象可以从Python路径导入。但我不知道如何。
如何制作帐户类(来自教程):
class Account(Persistent):
def __init__(self):
...
以独立模式知道zodbbrowser,以便用对象实例的__str__表示替换持久性破坏类型?
答案 0 :(得分:1)
一般回答这个问题:
最简单的方法是将pip install zodbbrowser
放入您用于创建相关数据库的ZODB应用程序的相同virtualenv中。这假设你使用virtualenv。
第二种最简单的方法是将zodbbrowser
添加到用于创建相关数据库的ZODB应用程序的buildout中buildout.cfg
的鸡蛋列表中。这假设您使用zc.buildout。
最后,您可以尝试设置PYTHONPATH,以便用于创建持久对象的模块是可导入的。
以上都不会对您的具体情况有所帮助,因为它们属于名为__main__
的模块的持久对象。那个坏主意!每次Python调用中只有一个__main__
,它取决于您运行的脚本。如果该脚本是zodbbrowser,那么它也可以是您的应用程序。
为了获得最佳效果,请不要在主脚本中定义任何Persistent子类。始终在单独的模块中定义它们并导入它们。
但是,如果您已经拥有这样的数据库,并且需要访问这些对象以进行取证或诸如此类的操作,那么可能有一种解决方法:
写一个新脚本,比如myzodbbrowser.py
,看起来像这样:
from myapp import Account # replace myapp with the script name of your app
import zodbbrowser.standalone
zodbbrowser.standalone.main()
使用你的virtualenv或buildout中的Python运行它,你安装了zodbbrowser。