如何通过python中的unix socket连接到mongodb

时间:2011-12-07 05:58:31

标签: python mongodb

有没有办法通过python中的unix socket连接到mongodb,而官方的 pymongo 模块还不支持unix socket。

我喜欢任何第三方替代品或补丁,而我一直在搜索并找不到。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

MongoDB v3.x更新

如果您在linux上升级到MongoDB 3.x,则已删除/tmp/mongodb-27017.sock上的组和其他权限。当您使用MongoClient进行连接时,您将收到权限被拒绝错误(host =&#39; /tmp/mongodb-27017.sock')

要解决此问题,请将MongoDB配置文件升级为YAML格式,其中包含filePermissions选项,以便您重新设置权限。

YAML格式的示例/etc/mongod.conf:

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

答案 2 :(得分: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