====== Flask MongoAlchemy ====== ===== Install ===== pip install Flask-MongoAlchemy ===== Use ===== ==== Initialization ==== from flask import Flask from flask.ext.mongoalchemy import MongoAlchemy app = Flask(__name__) app.config['MONGOALCHEMY_DATABASE'] = 'library' db = MongoAlchemy(app) class Author(db.Document): name = db.StringField() class Book(db.Document): title = db.StringField() author = db.DocumentField(Author) year = db.IntField() There are other ways to initialize it: app = Flask(__name__) db = MongoAlchemy(app) db = MongoAlchemy() def init_app(): app = Flask(__name__) db.init_app(app) return app ==== Create, update, delete ==== Now you can create authors and books: >>> from application import Author, Book >>> mark_pilgrim = Author(name='Mark Pilgrim') >>> dive = Book(title='Dive Into Python', author=mark_pilgrim, year=2004) >>> mark_pilgrim.save() >>> dive.save() If you make any changes on a document, you may call save() again: >>> mark_pilgrim.name = 'Mark Stalone' >>> mark_pilgrim.save() And you can remove a document from the database by calling its remove() method: >>> dive.remove() ==== Queries ==== Every document has a query class property. It’s very simple to use it: >>> mark = Author.query.get('76726') >>> mark.name = 'Mark Pilgrim' >>> mark.save() You also can use the filter method instead of the get() method: >>> mark = Author.query.filter(Author.name == 'Mark Pilgrim').first() >>> mark.name = 'Steve Jobs' >>> mark.save() === Advanced === You can create your own queries: from flask.ext.mongoalchemy import BaseQuery from application import db class MyCustomizedQuery(BaseQuery): def get_johns(self): return self.filter(self.type.first_name == 'John') class Person(db.Document): query_class = MyCustomizedQuery name = db.StringField() There are other functions: * first_or_404() * get(mongo_id) * get_or_404(mongo_id) === Pagination === You can call a method for a query: ''paginate(page, per_page=20, error_out=True)''. This method returns a ''Pagination'' object in which you can call... * has_next() * has_prev() * items = None * next(error_out=False) * next_num * page = None * pages * per_page = None * prev(error_out=False) * prev_num * query = None * total = None [[https://pythonhosted.org/Flask-MongoAlchemy/index.html#flask.ext.mongoalchemy.Pagination.has_next|Documentation for these methods]] ===== Configuration ===== >>> app.config['MONGOALCHEMY_SERVER_AUTH'] = False There are values to change in Mongo config: * MONGOALCHEMY_DATABASE * MONGOALCHEMY_SERVER * MONGOALCHEMY_PORT * MONGOALCHEMY_USER * MONGOALCHEMY_PASSWORD * MONGOALCHEMY_SAFE_SESSION * MONGOALCHEMY_OPTIONS * MONGOALCHEMY_SERVER_AUTH * MONGOALCHEMY_REPLICA_SET * MONGOALCHEMY_CONNECTION_STRING When MongoAlchemy or init_app() are invoked with only one argument (the Flask instance), a configuration value prefix of MONGOALCHEMY is assumed; this can be overridden with the config_prefix argument, for example: app = Flask(__name__) # defaulting to MONGOENGINE prefix mongo1 = MongoAlchemy(app) # using another database config app.config['OTHER_DBNAME'] = 'other' mongo2 = MongoAlchemy(app, config_prefix='OTHER')