Anubhav
Anubhav

Reputation: 147

Flask Pymongo Insert

I'm calling db dev to insert data into its collection. But it's creating a new collection and inserting data into admin db.

from app import app
from flask import Flask
from flask import jsonify
from flask import request
from flask_pymongo import PyMongo

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

app.config['MONGO_DBNAME'] = 'dev'
app.config['MONGO_AUTH_SOURCE'] = 'admin'
app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017/admin'

mongo = PyMongo(app)

@app.route('/mongo', methods=['GET'])
def get_all_docs():
  doc = mongo.db.abcd.insert({'abcd':'abcd'})
  return "Inserted"

if __name__ == '__main__':
    app.run(debug=True)

Am I missing something here?

PS: I tried replacing admin with dev. It gave pymongo.errors.OperationFailure: Authentication failed. I guess thats because the authentication data is in admin db.

app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017' This, also, didn't work.

Upvotes: 0

Views: 6641

Answers (1)

Anubhav
Anubhav

Reputation: 147

Replacing admin with dev in MONGO_URI causes Authentication Error.
Adding authSource will authenticate with admin db.
To do this, replace admin with dev?authSource=admin

from app import app
from flask import Flask
from flask import jsonify
from flask import request
from flask_pymongo import PyMongo

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017/dev?authSource=admin'

mongo = PyMongo(app)

@app.route('/mongo', methods=['GET'])
def get_all_docs():
  doc = mongo.db.abcd.insert({'abcd':'abcd'})
  return "Inserted"

if __name__ == '__main__':
    app.run(debug=True)

Upvotes: 2

Related Questions