2011-12-07 105 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 
相關問題