python访问ZODB数据库

#!/usr/bin/python2.4
# myzodb.py
import sys
import os
from ZODB import FileStorage
from ZODB import DB
import transaction

class MyZODB(object):
    def __init__(self, path):
        self.storage = FileStorage.FileStorage(path)
        self.db = DB(self.storage)
        self.connection = self.db.open()
        self.dbroot = self.connection.root()

    def close(self):
        self.connection.close()
        self.db.close()
        self.storage.close()

from myzodb import MyZODB
if __name__ == '__main__':
    #fetch_simple.py
    db = MyZODB('/opt/Data.fs')
    dbroot = db.dbroot
    for key in dbroot.keys():
        print key + ':',dbroot[key]
    db.close()

运行的使用出错了:

[root@localhost python]# ./myzodb.py
Traceback (most recent call last):
  File "./myzodb.py", line 5, in ?
    from ZODB import FileStorage
  File "/opt/Plone-2.5/lib/python/ZODB/__init__.py", line 20, in ?
    from persistent import TimeStamp
  File "/opt/Plone-2.5/lib/python/persistent/__init__.py", line 19, in ?
    from cPersistence import Persistent, GHOST, UPTODATE, CHANGED, STICKY
ImportError: /opt/Plone-2.5/lib/python/persistent/cPersistence.so: undefined symbol: PyUnicodeUCS2_AsEncodedString

上网查询发现是由于我本机的python是4字节的Unicode,而plone中定义的函数接口是针对2字节的Unicode的,所以我就重新编译了本机的python-2.4.3

./configure --enable-unicode=ucs2 --prefix=$PY_HOME --with-readline --with-zlib
make
make install
为了确定我使用的python是2字节的,我这么测试的:

[root@localhost bin]# /opt/Plone-2.5/Python-2.4.3/bin/python
Python 2.4.3 (#1, Aug  4 2011, 14:59:31) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.maxunicode
65535
返回值=1114111     ucs-4

返回值=65535          ucs-2

编译之后的python的确是ucs-2的了,但是将myzodb.py程序的地一句话修改为:

#!/opt/Plone-2.5/Python-2.4.3/bin/python

之后再执行./myzodb.py依然出现同样的错误。崩溃了
怎么办?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值