如何为独立的zodbbrowser注入类型?

2024-05-26 19:53:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是带有ZODB3数据库的独立zodbbrowser 0.11.1。我可以很好地访问数据库,但当我将未知类型的对象插入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'>
} 

我想看一个格式化的打印输出从uuurepr\uuuuuuuuuuuuuuuuuuuuuuuuuuuu(或uuuuuuuuu str\uuuuuuuuuuuuuu)。有关pypi的简短用户指南位于帮助!随处可见的断开对象建议确保应用程序对象可从Python路径导入。但我不知道怎么做。你知道吗

如何创建Account类(来自教程):

class Account(Persistent):
    def __init__(self):
        ...

在独立模式下,zodbbrowser知道如何用对象实例的\uu str \uuuuuuu表示替换持久的中断类型?你知道吗


Tags: 对象instance数据库类型mainaccountpersistentzodb
1条回答
网友
1楼 · 发布于 2024-05-26 19:53:23

概括地回答这个问题:

  • 最简单的方法是pip install zodbbrowser进入您用于创建相关数据库的ZODB应用程序的同一个virtualenv。这假设您使用virtualenv。

  • 第二种最简单的方法是将zodbbrowser添加到创建相关数据库的ZODB应用程序所使用的构建中buildout.cfg的鸡蛋列表中。这假设您使用zc.buildout公司.

  • 最后,您可以尝试设置PYTHONPATH,以便用于创建持久对象的模块是可导入的。

以上这些对您的具体情况都没有帮助,因为持久化对象是属于__main__模块的对象。那是个坏主意!在每个Python调用中只有一个__main__,这取决于您运行的脚本。如果该脚本是zodbbrowser,那么它不可能也是您的应用程序。你知道吗

为了获得最佳结果,不要在主脚本中定义任何持久子类。总是在单独的模块中定义它们并导入它们。你知道吗

但是,如果您已经有这样一个数据库,并且需要出于取证目的或其他目的访问这些对象,那么有一个可能的解决方法:

  • 写一个新脚本,比如myzodbbrowser.py,如下所示:

    from myapp import Account  # replace myapp with the script name of your app
    import zodbbrowser.standalone
    zodbbrowser.standalone.main()
    
  • 在安装了zodbbrowser的virtualenv或buildout中使用Python运行它。

相关问题 更多 >

    热门问题