有沒有什麼辦法通過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,你可以建立連接......」 –
編輯爲清晰起見,謝謝。 –