我正在学习 W3Schools 的 Python 教程。我刚刚开始学习 MongoDB 章节。我安装了 MongoDB 并检查了它:
import pymongo
没有出现错误。
但是一旦我输入以下代码:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mydict = { "name": "John", "address": "Highway 37" }
x = mycol.insert_one(mydict)
print(x.inserted_id)
我在 cmd 底部收到这些消息和错误消息:
cd C:\Users\xxx\myname
python index.py
输出:
Traceback (most recent call last):
File "index.py", line 8, in <module>
x = mycol.insert_one(mydict)
File "C:\Users\path...\pymongo\collection.py", line 695, in insert_one
self._insert(document,
File "C:\Users\path...\pymongo\collection.py", line 610, in _insert
return self._insert_one(
File "C:\Users\path...\pymongo\collection.py", line 599, in _insert_one
self.__database.client._retryable_write(
File "C:\Users\path...\pymongo\mongo_client.py", line 1490, in _retryable_write
with self._tmp_session(session) as s:
File "C:\Program Files\WindowsApps\path...\lib\contextlib.py", line 113, in __enter__
return next(self.gen)
File "C:\Users\path...\pymongo\mongo_client.py", line 1823, in _tmp_session
s = self._ensure_session(session)
File "C:\Users\path...\pymongo\mongo_client.py", line 1810, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "C:\Users\path...\pymongo\mongo_client.py", line 1763, in __start_session
server_session = self._get_server_session()
File "C:\Users\path...\pymongo\mongo_client.py", line 1796, in _get_server_session
return self._topology.get_server_session()
File "C:\Users\path...\pymongo\topology.py", line 482, in get_server_session
self._select_servers_loop(
File "C:\Users\path...\pymongo\topology.py", line 208, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: localhost: 27017: [WinError 10061] Could not connect because target computer actively refused connection
我也尝试过暂时禁用防火墙,但错误不断出现。
我用过:
"python 3.8.2
, mongoDB 4.2.5.0
, pymongo 3.10.1
, windows 10 home"
出了什么问题?
你的代码没有任何问题。
如果您禁用了防火墙,最可能的原因是 MongoDB 服务未安装或运行。在 Windows 上,按 Windows 键并输入 services 打开服务应用程序。检查服务 MongoDB Server 已列出并且具有 Running 状态。
您可以通过打开您喜欢的 Windows 终端或 PowerShell 并输入
mongo
来测试本地连接。如果它有效,你应该看到:
PS> mongo
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("1b5499b8-166a-4de6-a8c9-643499f04e66") }
MongoDB server version: 4.2.3
我试图从 Django 进行连接。我使用的是 Python 3.7,之前尝试过为 Python 3.6+ 提供的 URI 字符串,但它在 PyCharm 或 Jupyter 中不起作用。但后来我选择了 Python 版本 3.4+ 的 URI 字符串,它在 Jupyter Notebook 中工作,但我在从 Django 项目连接时遇到了问题。
为了解决这个问题,我从 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.11-signed.msi 安装了 MongoDB 应用程序,它在我的计算机上启动了 MongoDB 服务。并且无需更改任何以前的代码,我就可以连接。下面是我从 Django 应用程序连接到 MongoDB 的代码:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': <DBname>,
'HOST': "mongodb://<username>:<password>@cluster0-shard-00-00.pifkd.mongodb.net:27017,cluster0-shard-00-01.pifkd.mongodb.net:27017,cluster0-shard-00-02.pifkd.mongodb.net:27017/<DBname>?ssl=true&replicaSet=atlas-79xyw7-shard-0&authSource=admin&retryWrites=true&w=majority",
'USER': <username>,
'PASSWORD': <password>,
}
}
就我而言,我输入了错误的端口
client = pymongo.MongoClient('mongodb://localhost:27017/')
您可以通过任务管理器→性能→打开资源监视器→网络→监听端口
检查MongoDB服务器正在监听哪个端口(在Windows中)并搜索 mongod.exe。
您的设备可能已禁用 MongoDB 服务。
在搜索栏中搜索services,然后在列表中找到 MongoDB 服务。首先右键,然后单击属性,然后从禁用更改为自动或从手动更改为自动。
如果您想保留它手动,请右键单击列表中的 MongoDB 服务选项后单击“开始”。
我通过卸载防病毒软件解决了这个问题。现在我害怕浏览网络,但我会小心,直到六月课程结束。与此同时,我的防病毒软件阻止了与 MongoDB 的任何通信。现在我可以通过 Jupyter Notebook 导入它并且工作正常。