基本上我可以使用ZODB。然而,ZEO教程都非常令人困惑。
根据我的理解,您可以通过进入我的目录启动服务器并打开命令提示符
python runzeo.py -C zeo.config
我的zeo.config文件如下所示
<zeo>
address localhost:8090
</zeo>
<filestorage>
path C:\\Anaconda\\Lib\\site-packages\\ZEO\\var\\tmp\\Data.fs
</filestorage>
<eventlog>
<logfile>
path C:\\Anaconda\\Lib\\site-packages\\ZEO\\var\\tmp\\zeo.log
format %(asctime)s %(message)s
</logfile>
</eventlog>
当我运行它时,日志文件用
填充2014-07-02T14:49:15 (1948) opening storage '1' using FileStorage
2014-07-02T14:49:15 StorageServer created RW with storages: 1:RW:C:\\Anaconda\\Lib\\site-packages\\ZEO\\var\\tmp\\Data.fs
2014-07-02T14:49:15 (1948) listening on ('localhost', 8090)
现在,当我尝试让客户端在数据库中添加一些随机内容,并在每一行后面打印以查看其结果:
from ZEO.ClientStorage import ClientStorage
from ZODB import DB
import transaction
print "starting"
storage=ClientStorage(('localhost',8090))
print "storage opened"
db=DB(storage)
conn=db.open()
print "connection opened"
root=conn.root()
print "established connection"
root['letters']=['a','b','c']
print "added values"
transaction.commit()
print "transaction done"
root.close()
print "closed"
我的代码只打印&#34;开始&#34;,没有抛出错误消息,所以我假设它卡在了存储= ClientStorange((&#39; localhost&#39;,8090))行,我的Data.fs文件保持不变。我不知道出了什么问题,我已经查阅了所有的教程。
我在Windows上使用Python 2.7并从pip安装了ZEO / ZODB,所以我认为它们都是最新版本有帮助。
任何帮助或指向不同面向对象数据库的指针(具有多个进程访问权限)都将受到赞赏。
谢谢大家
答案 0 :(得分:2)
找到我自己的问题的答案。似乎在Windows中使用localhost的实现存在一个错误。 (在同一台机器上运行服务器和客户端)
源代码需要编辑:
我在Windows上使用ZODB / ZEO 4.0与Python 2.7.6有同样的问题(无法连接到ZEO服务器)。
建议的解决方案(更改ZEO / zrpc / client.py的第446行)对我有用,那么为什么不将补丁纳入4.0版本呢?
- socket.getaddrinfo(host or 'localhost', port) + socket.getaddrinfo(host or 'localhost', port, 0, socket.SOCK_STREAM)"