有没有什么办法通过python中的unix套接字连接到mongodb,而官方的pymongo模块还不支持unix套接字。如何通过Python中的unix套接字连接到mongodb
我想要任何第三方替代品或补丁程序,但我已经搜索并没有找到一个。
我不喜欢ORM风格的库,因为mongodb => python dicts很自然且易于使用,所以我没有考虑到MongoEngine这样的东西。
有没有什么办法通过python中的unix套接字连接到mongodb,而官方的pymongo模块还不支持unix套接字。如何通过Python中的unix套接字连接到mongodb
我想要任何第三方替代品或补丁程序,但我已经搜索并没有找到一个。
我不喜欢ORM风格的库,因为mongodb => python dicts很自然且易于使用,所以我没有考虑到MongoEngine这样的东西。
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
。
在Python的范围之外,您可以在TCP/IP套接字和unix域套接字之间构建代理。因此,你仍然可以使用pymongo
nc -l 1234 | nc -U /tmp/foo
或
socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo
参见:
谢谢你的好意,但是这不是正是我想要的:)我想使用Unix套接字的性能和稳定性,但如果我建TCP中的代理和转发查询这两个目标都没有。 –
更新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
所以这是从pymongo 2.4开始最终实现的。谢谢! –
说,“作为pymongo 2.4”。 pymongo是创建unix socket的人吗?或者是“'sock'。至于pymongo 2.4,你可以建立连接......” –
编辑为清晰起见,谢谢。 –