安装

您可以轻松地使用PIP或easy_install的安装:

$ [sudo] pip install Flask-MongoAlchemy
$ [sudo] easy_install Flask-MongoAlchemy



如果你愿意,你可以使用最新git版本


$ git clone https://github.com/cobrateam/flask-mongoalchemy.git
$ cd flask-mongoalchemy
$ [sudo] python setup.py develop



请确认您已经安装MongoDB的使用它。


用法

你需要先创建一个MongoAlchemy对象,并用它来创建数据库文件。下面是一个完整的例子:

from flask import Flask
from flaskext.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()



现在你可以创建Author和Book:


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()



如果你改变了原来的文件内容,你可以调用save()


mark_pilgrim.name = 'Mark Stalone'
mark_pilgrim.save()



可以调用其remove()方法从数据库中删除一个文件:


dive.remove()



另一个基本查询文件操作。每个文档都有一个查询类的属性。使用起来非常简单:


mark = Author.query.get('76726')
mark.name = 'Mark Pilgrim'
mark.save()




您还可以使用filter()过滤的方法,而不是get()方法:


mark = Author.query.filter(Author.name == 'Mark Pilgrim').first()
mark.name = 'Steve Jobs'
mark.save()



使用身份验证的连接


这里可以使用的身份验证连接到一个MongoDB服务器。认证可以是基于服务器或基于数据库。
默认方式是使用基于服务器的身份认证,使用基于数据库的认证,你需要关闭的配置的值MONGOALCHEMY_SERVER_AUTH的(见下一节更详细的配置值):

app.config['MONGOALCHEMY_SERVER_AUTH'] = False

配置值

下面的Flask-MongoAlchemy的配置值:


MONGOALCHEMY_DATABASE 数据库的名称。
MONGOALCHEMY_SERVER MongoDB服务器。默认值:localhost


MONGOALCHEMY_PORT MongoDB服务器监听端口。默认值:27017


MONGOALCHEMY_USER 数据库连接的用户。默认值:None


MONGOALCHEMY_PASSWORD 数据库连接的密码。默认值:None


MONGOALCHEMY_SAFE_SESSION 在安全模式下使用session。当在安全模式下,所有的方法,如保存,删除等操作完成。默认值:False


MONGOALCHEMY_OPTIONS MongoDB服务器连接时,额外的选项。例如:safe=true 默认值:None


MONGOALCHEMY_SERVER_AUTH 布尔值,表示使用基于服务器的身份验证或无。当设置为False,将使用基于数据库的认证。默认值:True

API

您可以使用应用程序实例,或调用一个init_app()方法的一个MongoAlchemy的实例对象。这个例子的应用程序实例化:


app = Flask(__name__)
db = MongoAlchemy(app)



这里调用init_app的()方法:


db = MongoAlchemy()

def init_app():
    app = Flask(__name__)
    db.init_app(app)
    return app



init_app(app)


该回调函数可以用来初始化MongoDB。切勿在未初始化的时候使用,这样会泄漏数据库。



query=None
query_class的一个实例。用于查询数据库。


query_class
查询类的使用。查询属性是这个类的一个实例。默认情况下用于BaseQuery。


别名BaseQuery


remove(safe=None)
删除数据库。


可选的安全参数是一个布尔值,指定是否应该等待操作完成remove方法。


save(safe=None)
保存数据库。


可选的安全参数是一个布尔值,指定是否应该等待操作完成remove方法。


这个类提供了一些方法,并可以扩展到用户文档提供了一个自定义的查询类。


这里举个例子:

from flaskext.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()



johns = Person.query.get_johns().first()



注意:如果要扩展BaseQuery写一个__init__方法,你应该总是通过super关键字调用这个类的__init__。

class MyQuery(BaseQuery):

    def __init__(self, *args, **kwargs):
        super(MyQuery, self).__init__(*args, **kwargs)



first_or_404()


如果结果不包含任何数据将返回的第一个结果查询,或中止


get(mongo_id)
如果没有找到,返回一个Document实例mongo_id“或”None“

get_or_404(mongo_id)
像get()方法,但如果没有找到,而不是返回None中止与404

分页

PAGINATE(page,per_page=20,error_out= True)
从页返回per_page项默认情况下,它会中止与404如果没有被发现,并大于1。这种行为可以被禁用通过设置假error_out。


class flaskext.mongoalchemy.Pagination(query,per_page,total,items)
内部辅助类返回由PAGINATE()。


has_next()
返回 True,如果存在下一个页面。


has_prev()
返回True,如果前一个页面存在。


items=None
项目为当前页的列表


next(error_out=False)
下页返回分页对象。


next_num
的翻页数。


page=None
当前页码