簡體   English   中英

如何通過python中的unix socket連接到mongodb

[英]How to connect to mongodb via unix socket in python

有沒有辦法通過python中的unix socket連接到mongodb,而官方的pymongo模塊還不支持unix socket。

我喜歡任何第三方替代品或補丁,而我一直在搜索並找不到。

我不喜歡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

MongoDB v3.x的更新

如果您在Linux上升級到MongoDB 3.x,則已刪除/tmp/mongodb-27017.sock上的組和其他權限。 使用MongoClient連接時,您將收到權限被拒絕錯誤(host ='/ 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

在Python的范圍之外,您可以在TCP / IP套接字和unix域套接字之間構建代理。 所以,你仍然可以使用pymongo

netcatsocat都可以做到這一點。

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

要么

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

也可以看看:

在Linux下將TCP流量重定向到UNIX域套接字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM