Kan*_*nna 9 django mongodb python-3.x
我正在使用 django 和 mysql 数据库来开发 api。现在我有了一个新的需求,用django连接mongodb数据库。我已经使用了以下解决方案
from sshtunnel import SSHTunnelForwarder
import pymongo
import pprint
MONGO_HOST = "REMOTE_IP_ADDRESS"
MONGO_DB = "DATABASE_NAME"
MONGO_USER = "LOGIN"
MONGO_PASS = "PASSWORD"
server = SSHTunnelForwarder(
MONGO_HOST,
ssh_username=MONGO_USER,
ssh_password=MONGO_PASS,
remote_bind_address=('127.0.0.1', 27017)
)
server.start()
client = pymongo.MongoClient('127.0.0.1', server.local_bind_port) #
server.local_bind_port is assigned local port
db = client[MONGO_DB]
Run Code Online (Sandbox Code Playgroud)
现在我正在关注
sshtunnel.BaseSSHTunnelForwarderError:无法建立与 SSH 网关的会话
在 django poject 中连接 mongodb 是好方法吗?
我认为这与您连接它的方式无关。该消息意味着您的 SSH 配置中的某些内容不正确。
应SSHTunnelForwarder使用 SSH 主机、端口、用户和密码进行实例化,因为您首先需要访问可以连接到 Mongo 主机的主机(运行 sshd 的主机)。我也不知道你在哪里传递密钥进行身份验证。确保<your-key-instance-here>根据您拥有的密钥类型进行相应定义(例如,对于 RSA 类型密钥,使用paramiko: paramiko.RSAKey.from_private_key_file('/path/to/your/ssh/key/file'))。之后,在客户端中您需要指定 Mongo 用户和密码:
@contextmanager
def _tunnel():
with SSHTunnelForwarder((ssh_host, 22),
ssh_username=SSH_USER,
ssh_pkey=<your-key-instance-here>,
remote_bind_address=(MONGO_HOST, MONGO_PORT)
) as tunneled_conn:
yield pymongo.MongoClient('mongodb://%s:%s@127.0.0.1' % (MONGO_USR, MONGO_PWD),
port=tunneled_conn.local_bind_port
)
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中将其用作
with _tunnel() as mongo_client:
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17193 次 |
| 最近记录: |