无法通过flask_pymongo连接到MongoDB

时间:2017-10-22 08:25:51

标签: flask flask-pymongo

我在玩FlaskMongoDB时遇到了问题。这是场景

  

启用授权

如果我使用PyMongo()来自flask_pymongo的{​​{1}}模式,我只会获得mongo = PyMongo(app)。虽然我能够使用相同的连接字符串从Authorization Errors通过MonogoClient()成功检索数据库。

  

未启用授权

如果我使用pymongo,则没有错误。但我也没有得到任何数据。例如,flask_pymongo只返回空数组。使用mongo.db.collection_names(),相同的操作成功。

  

我正在使用:

  • python = 3.6.3
  • 烧瓶= 0.12.2
  • flask_pymongo = 0.5.1
  • pymongo = 3.5.1

先谢谢

2 个答案:

答案 0 :(得分:0)

您是否看到this tutorial解释了如何使用MongoDB制作简单的RESTful API。

答案 1 :(得分:0)

我已经将Flask与Flask-PyMongo一起使用了一段时间,以下是我与mongodb建立连接的方式。

from flask import Flask
from flask_cors import CORS
from flask_pymongo import PyMongo

app = Flask(__name__)
CORS(app) # very important!

USERNAME = '<username>'
PASSWORD = '<password>'
PORT = '27017'
HOST = 'localhost'

app.config['MONGO_DBNAME'] = '<DB Name>'
app.config['MONGO_HOST'] = HOST
app.config['MONGO_PORT'] = PORT
app.config['MONGO_USERNAME'] = USERNAME
app.config['MONGO_PASSWORD'] = PASSWORD
mongo = PyMongo(app)

根据您的设置,您可能不需要CORS(app)

要创建多个连接,请执行以下操作:

# Users db
app.config['MONGO2_DBNAME'] = 'users'
app.config['MONGO2_HOST'] = HOST
app.config['MONGO2_PORT'] = PORT
app.config['MONGO2_USERNAME'] = USERNAME
app.config['MONGO2_PASSWORD'] = PASSWORD
users_mongo = PyMongo(app, config_prefix='MONGO2')

我还应该指出,通过Flask-PyMongo与授权连接时遇到问题,因为数据库需要以某种方式配置授权。 Flask-PyMongo希望数据库权限位于数据库本身而不是其他位置。因此,在为数据库创建用户名和密码时,请在mongo shell中执行以下操作:

创建用户管理员

use admin
db.createUser({user: "userAdmin", pwd: "", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )

在您的数据库上创建用户

use <YOUR db>
db.createUser({user: "", pwd: "", roles:[{ role: "dbAdmin", db: ""}, {role: "readWrite", db: ""}]})

在mongo中,甚至使用PyMongo,您都可以在一个数据库中创建用户,并授予他们访问其他数据库的权限,但是Flask-PyMongo出于某种原因在这里不能很好地发挥作用,因此您需要在想要在数据库中创建的用户使用。

希望这也会有所帮助,因为我在这里也很努力。随时要求澄清