python使用pymongo连接本地数据库提示积极拒绝?

新手上路,请多包涵

问题如题,具体情况我详细描述。
在知乎上提过相同问题

本人自学python爬虫时候接触到了MongoDB,根据菜鸟教程给的网址进行安装,目测还挺正常的,提出了warning但是查了一下大概就是说我没用户名密码本地数据库什么的。如下图:
安装结果

设置了配置文件mongod.cfg:

systemLog:
   destination: file
   path: H:\data\log\mongo.log
   logAppend: true
storage:
    dbPath: h:\data\db

net:
  bindIp: 127.0.0.1

到这里还没什么异样,我接着按照菜鸟教程的步骤输入在shell里输入mongo得到反馈:
反馈
这和菜鸟教程的结果不一致:
不一致结果

其实也无伤大雅,因为后面的加法和插入数据都成功了。

但是根据其他的教程,我在chrome输入“localhost:27107”提示我:
访问失败

接下来就是回到我现在提出的问题了。我看了一些代码之后写了一个很简单的代码来玩玩,如下:

from pymongo import MongoClient

client = MongoClient('localhost', 27107)

db = client.test

posts = db.posts

post = {
        "name": "shiki", 
        "age": "21"
        }

posts.insert(post)

不论我代码写的对不对,我发现我在第二行就出现了错误:
图片描述

此时我的windows服务MongoDB 是在运行的,我应该也是在运作MongoDB(其实我不大确定有没开启,不过我在CMD里已经挂着第一张图的界面,我就默认是打开了

问题的描述就到这了。下面是我电脑的一些情况,和做过的尝试,说出来好分析。

--------------------------分割线-----------------------------

  1. 网上有说法27107可能没开放什么的,我在防火墙的入站规则那已经设置打开了。没用
  2. 在分别对有挂SSR和没挂SSR时候进行过尝试,也不行。
  3. 找到还有人说ip问题,我试过把ip设置成0.0.0.0也不行(其实我觉得可能性不大,不过也试了)
  4. 还有人说mongodb没启动……我也不知道怎么说了,我用官方自带的MongoDB Compass能连上,在shell也能进行数据操作,这就默认是开启了吧?
  5. 在配置文件了,我也把端口特意写成了27107也不行
  6. 我的是台式电脑,不是用的网线,是用的是wifi接收器,而且家里的tplink是经过小米信号放大器类似中继过吧?我也不太懂,就是房间信号弱,就用了个放大器再搜放大器wifi
  7. 严重怀疑是网络不知道那个环节出现问题。当然了也有可能我经验不足没发现什么。有意思想要解决问题的大佬可以提出自己的想法或者跟我要一些详细的情况。再三感谢了!!!!
阅读 5.7k
1 个回答

有点混乱,我一点点说:

目测还挺正常的,提出了warning但是查了一下大概就是说我没用户名密码本地数据库什么的。

没错,这里只是警告,告诉你有一些运行风险,不符合最佳实践,但是不影响你使用。只是上生产环境之前应该考虑解决掉这些问题。

配置文件没有问题,你的截图中已经进入了mongo shell,可以开始执行mongo的CRUD命令了(就跟进入了mysql shell一样)。但是你又在mongo shell里面执行mongo,不明白是什么意思。mongo.exe是一个bash命令,运行它之后就是进入mongo shell而已,而你已经在shell里面了。你是怎么进入这个shell的?不就是执行了mongo吗?

再来说chrome连接localhost:27017,好多人犯这样的错误,可能都是来自于一些教程的误导。举个例子,MySQL默认监听localhost:3306,SQLServer默认监听localhost:1433,你会在影响器里面去连接localhost:1433/localhost:3306吗?连接之后会有什么效果?同样会出现截图里面的错误。这样去连接没有意义。要连接27017端口应该使用mongo shell,也就是mongo.exe:mongo.exe --host localhost:27017

最后说Python的问题。你前面已经通过shell连接上了MongoDB,所以服务器运行是没有问题的。而Python连接不上,可能原因是localhost这个域名的解析有问题。你可以改用:

MongoClient('127.0.0.1', '27017')

试一下看看是什么结果。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题