2011-12-07 73 views
6

有没有什么办法通过python中的unix套接字连接到mongodb,而官方的pymongo模块还不支持unix套接字。如何通过Python中的unix套接字连接到mongodb

我想要任何第三方替代品或补丁程序,但我已经搜索并没有找到一个。

我不喜欢ORM风格的库,因为mongodb => python dicts很自然且易于使用,所以我没有考虑到MongoEngine这样的东西。

回答

7

MongoDB中,默认情况下,在/tmp/mongodb-27017.sock创建一个Unix套接字。作为pymongo 2.4,你可以做这样的连接:

from pymongo import MongoClient 
CONNECTION = MongoClient('/tmp/mongodb-27017.sock') 

此外,您可以用--nounixsocket开始的mongod禁用此行为或指定与--unixSocketPrefix <path>

MongoDB的备用位置总是会创建并听取对UNIX除非--nounixsocket已设置,--bind_ip未设置或--bind_ip指定127.0.0.1

+0

所以这是从pymongo 2.4开始最终实现的。谢谢! –

+0

说,“作为pymongo 2.4”。 pymongo是创建unix socket的人吗?或者是“'sock'。至于pymongo 2.4,你可以建立连接......” –

+0

编辑为清晰起见,谢谢。 –

1

在Python的范围之外,您可以在TCP/IP套接字和unix域套接字之间构建代理。因此,你仍然可以使用pymongo

netcatsocat可以做到这一点。

nc -l 1234 | nc -U /tmp/foo 

socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo 

参见:

Redirecting TCP-traffic to a UNIX domain socket under Linux

+1

谢谢你的好意,但是这不是正是我想要的:)我想使用Unix套接字的性能和稳定性,但如果我建TCP中的代理和转发查询这两个目标都没有。 –

6

更新MongoDB的3.x版

如果升级到Linux的MongoDB 3.x中,该组和/tmp/mongodb-27017.sock其他权限已被删除。当你使用MongoClient连接(host ='/ tmp/mongodb-27017.sock')时,你将收到权限被拒绝的错误。

要解决这个问题,请将MongoDB配置文件升级到YAML格式,其中包括filePermissions选项,权限回来。

例/etc/mongod.conf在YAML格式:

storage: 
    dbPath: "/var/lib/mongodb" 
systemLog: 
    destination: file 
    path: "/var/log/mongodb/mongod.log" 
    logAppend: true 
net: 
    unixDomainSocket: 
     filePermissions: 0777 
相关问题