ZODB / ZEO。从客户端连接到服务器

时间:2014-07-02 05:47:14

标签: python database zodb

基本上我可以使用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,所以我认为它们都是最新版本有帮助。

任何帮助或指向不同面向对象数据库的指针(具有多个进程访问权限)都将受到赞赏。

谢谢大家

1 个答案:

答案 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)"

来自https://bugs.launchpad.net/zodb/+bug/1004513