我正在尝试通过python套接字连接到mongodb实例。网址看起来像这样
用户名:password@host.com:端口
如何使用python套接字连接到它?
以下代码给出了这个错误:[Errno -5]没有与主机名相关联的地址
import socket
import tornado
full_url = '%s:%s@%s' % (username, password, host)
s = socket.socket()
s.connect((full_url, port))
stream = iostream.IOStream(s)
编辑 - 我问的原因是因为asyncmongo现在不支持这种类型的网址。我想看看我是否可以写一个补丁。 asyncmongo库使用类似上面代码中的套接字连接。
答案 0 :(得分:2)
您应该使用驱动程序连接到mongodb。如果您正在使用Tornado(看起来您打算这样做),请尝试asyncmongo;如果您使用的是线程Web服务器/应用程序框架(Django,Pylons等),则可以直接使用PyMongo。
编辑:至于为什么此代码不起作用,socket
模块不接受连接的网址,只接受主机名和端口。这是一个低级库。要连接到(网络)网址,请考虑使用urllib2或httplib。
编辑2: MongoDB中的身份验证不在传输级别处理,而是在应用程序级别处理。我建议你先阅读Implementing Authentication in a Driver,然后看看PyMongo如何实现身份验证(在connection.py和database.py中)。您还需要为asyncmongo移植或重新实现MongoDB连接URI解析,该文档记录为here。