Flask-PyMongo

MongoDB 是一个开源数据库,它存储灵活,形式类似 JSON” 文档 “。与关系数据库中的数据行不同,其中可以包含任何数字、名称,或者复杂的层级结构。Python 开发人员可以将 MongoDB 视为一个持久化、可搜索的Python 字典存储库 (实际上, 这就是 PyMongo 如何来表达 MongoDB 的文档的方式)。

拓展Flask-PyMongo 在 Flask 中集成了 PyMongo 并且增加了一些更为便利的帮助。

快速入门

首先,安装 Flask-PyMongo:

$ pip install Flask-PyMongo

接下来,,在你的代码中添加一个 PyMongo :

from flask import Flask
from flask_pymongo import PyMongo

app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://localhost:27017/myDatabase"
mongo = PyMongo(app)

PyMongo 连接运行在本机上 27017 端口的 数据库名为 myDatabase. 的MongoDB 服务器,这个数据库显示为 db 属性。

你可以直接在视图中使用 db

@app.route("/")
def home_page():
    online_users = mongo.db.users.find({"online": True})
    return render_template("index.html",
        online_users=online_users)

注解

Flask-PyMongo 的早期版本要求 MongoDB URI 包含一个数据库名称。自2.2 版本起, 这。如果没有数据库名称, 则 db 属性将是 None

兼容性

Flask-PyMongo依赖于最新版本的Flask和PyMongo,这里的“最近”意指“近三年”。Flask-PyMongo 可能 适用于旧版本。但不接受旧版本的兼容性修补程序,并且未来的更新可能会破坏旧版本兼容性。

Flask-PyMongo 通过MongoDB 支持的版本 测试,Python2.7和3.4+版本的测试。有关经过测试且已知兼容的版本组合的确切列表,在 tox.ini.访问 envlist

帮助

Flask-PyMongo 为一些常见任务提供帮助:

配置

你可以通过将 MongoDB URI 传递给 PyMongo 构造函数,或将其分配给 MONGO_URI Flask 配置变量

你还可以将其他关键字参数传递给 PyMongo 构造函数。它们直接传递给底层的 MongoClient 对象。

注解

默认情况下,Flask-PyMongo将 connect 关键字参数设置为 False ,以防止PyMongo主动连接。 PyMongo本身是 fork进程不安全 的,并且在实际使用应用程序之前延迟连接是必要的,以避免一些问题出现。 如果您希望更改此默认行为,请将 connect = True 作为关键字参数传递给 PyMongo

您可以创建多个 PyMongo 实例,以连接多个数据库或数据库服务器:

app = Flask(__name__)

# connect to MongoDB with the defaults
mongo1 = PyMongo(app, uri="mongodb://localhost:27017/databaseOne")

# connect to another MongoDB database on the same host
mongo2 = PyMongo(app, uri="mongodb://localhost:27017/databaseTwo")

# connect to another MongoDB server altogether
mongo3 = PyMongo(app, uri="mongodb://another.host:27017/databaseThree")

每个实例将独立于其他实例且不共享任何状态。

API

Classes

Wrappers

Flask-PyMongo包装了PyMongo的类 MongoClient, Database, 和 Collection 类,并覆盖它们的属性和项目访问器。 以这种方式包装 PyMongo 类让 Flask-PyMongo 将方法添加到 Collection ,同时允许用户在代码中使用 MongoDB 风格的点状表达式。

>>> type(mongo.cx)
<type 'flask_pymongo.wrappers.MongoClient'>
>>> type(mongo.db)
<type 'flask_pymongo.wrappers.Database'>
>>> type(mongo.db.some_collection)
<type 'flask_pymongo.wrappers.Collection'>

更新历史与贡献者

更改:

  • 2.2.0: November 1, 2018

    • #117 允许没有数据库名称的URI。
  • 2.1.0: August 6, 2018

    • #114 接受 save_file() 的关键词参数(Andrew C. Hawkins)。
  • 2.0.1: July 17, 2018

    • #113 使 PyMongoapp 参数成为可选项 (yarobob)。
  • 2.0.0: July 2, 2018

    此版本与Flask-PyMongo 0.5.x或任何早期版本不兼容。 你可以在 issue #110 中查看原因和更改的解释 。

    • Only support configuration via URI.
    • Don’t connect to MongoDB by default.
    • Clarify version support of Python, Flask, PyMongo, and MongoDB.
    • Readability improvement to README.md (MinJae Kwon).
  • 0.5.2: May 19, 2018

    • #102 Return 404, not 400, when given an invalid input to BSONObjectIdConverter (Abraham Toriz Cruz).
  • 0.5.1: May 24, 2017

    • #93 Supply a default MONGO_AUTH_MECHANISM (Mark Unsworth).
  • 0.5.0: May 21, 2017

    This will be the last 0.x series release. The next non-bugfix release will be Flask-PyMongo 2.0, which will introduce backwards breaking changes, and will be the foundation for improvements and changes going forward. Flask-PyMongo 2.0 will no longer support Python 2.6, but will support Python 2.7 and Python 3.3+.

    • #44, #51 Redirect / to /HomePage in the wiki example (David Awad)
    • #76 Build on more modern Python versions (Robson Roberto Souza Peixoto)
    • #79, #84, #85 Don’t use flask.ext import paths any more (ratson, juliascript)
    • #40, #83, #86 Fix options parsing from MONGO_URI (jobou)
    • #72, #80 Support MONGO_SERVER_SELECTION_TIMEOUT_MS (Henrik Blidh)
    • #34, #64, #88 Support from MONGO_AUTH_SOURCE and MONGO_AUTH_MECHANISM (Craig Davis)
    • #74, #77, #78 Fixed maxPoolSize in PyMongo 3.0+ (Henrik Blidh)
    • #82 Fix “another user is already authenticated” error message.
    • #54 Authenticate against “admin” database if no MONGO_DBNAME is provided.
  • 0.4.1: January 25, 2016

    • Add the connect keyword: #67.
  • 0.4.0: October 19, 2015

    • Flask-Pymongo is now compatible with pymongo 3.0+: #63.
  • 0.3.1: April 9, 2015

    • Flask-PyMongo is now tested against Python 2.6, 2.7, 3.3, and 3.4.
    • Flask-PyMongo installation now no longer depends on nose.
    • #58 Update requirements for PyMongo 3.x (Emmanuel Valette).
    • #43 Ensure error is raised when URI database name is parsed as ‘None’ (Ben Jeffrey).
    • #50 Fix a bug in read preference handling (Kevin Funk).
    • #46 Cannot use multiple replicaset instances which run on different ports (Mark Unsworth).
    • #30 ConfiguationError with MONGO_READ_PREFERENCE (Mark Unsworth).
  • 0.3.0: July 4, 2013

    • This is a minor version bump which introduces backwards breaking changes! Please read these change notes carefully.
    • Removed read preference constants from Flask-PyMongo; to set a read preference, use the string name or import contants directly from pymongo.read_preferences.ReadPreference.
    • #22 (partial) Add support for MONGO_SOCKET_TIMEOUT_MS and MONGO_CONNECT_TIMEOUT_MS options (ultrabug).
    • #27 (partial) Make Flask-PyMongo compatible with Python 3 (Vizzy).
  • 0.2.1: December 22, 2012

    • #19 Added MONGO_DOCUMENT_CLASS config option (jeverling).
  • 0.2.0: December 15, 2012

    • This is a minor version bump which may introduce backwards breaking changes! Please read these change notes carefully.
    • #17 Now using PyMongo 2.4’s MongoClient and MongoReplicaSetClient objects instead of Connection and ReplicaSetConnection classes (tang0th).
    • #17 Now requiring at least PyMongo version 2.4 (tang0th).
    • #17 The wrapper class flask_pymongo.wrappers.Connection is renamed to flask_pymongo.wrappers.MongoClient (tang0th).
    • #17 The wrapper class flask_pymongo.wrappers.ReplicaSetConnection is renamed to flask_pymongo.wrappers.MongoReplicaSetClient (tang0th).
    • #18 MONGO_AUTO_START_REQUEST now defaults to False when connecting using a URI.
  • 0.1.4: December 15, 2012

    • #15 Added support for MONGO_MAX_POOL_SIZE (Fabrice Aneche)
  • 0.1.3: September 22, 2012

    • Added support for configuration from MongoDB URI.
  • 0.1.2: June 18, 2012

    • Updated wiki example application
    • #14 Added examples and docs to PyPI package.
  • 0.1.1: May 26, 2012

    • Added support for PyMongo 2.2’s “auto start request” feature, by way of the MONGO_AUTO_START_REQUEST configuration flag.
    • #13 Added BSONObjectIdConverter (Christoph Herr)
    • #12 Corrected documentation typo (Thor Adam)
  • 0.1: December 21, 2011

    • Initial Release

Contributors: