【问题标题】:Cannot connect to remote MongoDB server using flask-mongoengine无法使用 flask-mongoengine 连接到远程 MongoDB 服务器
【发布时间】:2017-02-07 01:23:21
【问题描述】:

尝试使用flask-mongoengine连接到远程服务器上托管的MongoDB集群,但抛出以下错误:

File "test.py", line 9, in <module>
    inserted = Something(some='whatever').save()
  File "/home/lokesh/Desktop/Work/Survaider_Apps/new_survaider/survaider-env/lib/python3.5/site-packages/mongoengine/document.py", line 323, in save
    object_id = collection.save(doc, **write_concern)
  File "/home/lokesh/Desktop/Work/Survaider_Apps/new_survaider/survaider-env/lib/python3.5/site-packages/pymongo/collection.py", line 2186, in save
    with self._socket_for_writes() as sock_info:
  File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/home/lokesh/Desktop/Work/Survaider_Apps/new_survaider/survaider-env/lib/python3.5/site-packages/pymongo/mongo_client.py", line 762, in _get_socket
    server = self._get_topology().select_server(selector)
  File "/home/lokesh/Desktop/Work/Survaider_Apps/new_survaider/survaider-env/lib/python3.5/site-packages/pymongo/topology.py", line 210, in select_server
    address))
  File "/home/lokesh/Desktop/Work/Survaider_Apps/new_survaider/survaider-env/lib/python3.5/site-packages/pymongo/topology.py", line 186, in select_servers
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: admin:27017: [Errno -2] Name or service not known

下面是我正在使用的代码:

# test.py

from my_app_module import app
from flask_mongoengine import MongoEngine

db = MongoEngine(app)

class Something(db.Document):
    some = db.StringField()

inserted = Something(some='whatever').save()

print(inserted)
for obj in Something.objects:
    print(obj)

我的config.py 文件包含:

# config.py

MONGODB_SETTINGS = {
    'db': 'testdb',
    'host': 'mongodb://<my_username>:<my_password>@<my_cluster_replica_1>.mongodb.net:27017,<my_cluster_replica_2>.mongodb.net:27017,<my_cluster_replica_3>.mongodb.net:27017/admin?ssl=true&replicaSet=<my_cluster>&authSource=admin',
}

但我可以使用以下代码使用pymongo 进行连接。

from pymongo import MongoClient

uri = 'mongodb://<my_username>:<my_password>@<my_cluster_replica_1>.mongodb.net:27017,<my_cluster_replica_2>.mongodb.net:27017,<my_cluster_replica_3>.mongodb.net:27017/admin?ssl=true&replicaSet=<my_cluster>&authSource=admin'

client = MongoClient(uri)
db = client['testdb']

db.test_collection.insert({'some_key': 'some_value'})

for col in db.test_collection.find():
    print(col)

# Prints {'some_key': 'some_value', '_id': ObjectId('57ec35d9312f911329e54d5e')}

我试图找到解决方案,但之前似乎没有人遇到过这个问题。我正在使用 MongoDB 的 Atlas 解决方案来托管 MongoDB 集群。

【问题讨论】:

    标签: python mongodb pymongo mongoengine flask-mongoengine


    【解决方案1】:

    我发现这是flask-mongoengine 版本0.8 中的一个错误,并已报告here。

    【讨论】:

    • 解决方法是什么,我的版本是mongoengine==0.19.1 和flask-mongoengine==0.9.5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多