【问题标题】:Can't connect to MongoDB via flask_pymongo无法通过 flask_pymongo 连接到 MongoDB
【发布时间】:2018-04-02 23:26:43
【问题描述】:

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

启用授权

如果我使用flask_pymongo 中的PyMongo()mongo = PyMongo(app) 模式,我只会得到Authorization Errors。虽然我能够使用相同的连接字符串通过MonogoClient()pymongo 成功检索数据库。

未启用授权

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

我正在使用:

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

提前致谢

【问题讨论】:

标签: flask flask-pymongo


【解决方案1】:

我已经使用 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 期望 db 权限在数据库本身而不是其他地方。因此,在为 db 创建用户和密码时,请在 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 出于某种原因在此处无法正常工作,您需要在您想要的数据库中创建用户使用。

希望这会有所帮助,因为我在这里也遇到了困难。随时要求澄清

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多