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)。
- #114 接受
2.0.1: July 17, 2018
- #113 使
PyMongo
的app
参数成为可选项 (yarobob)。
- #113 使
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).
- #93 Supply a
default
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
andMONGO_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.
- #44, #51 Redirect
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
andMONGO_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).
- #19 Added
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
andMongoReplicaSetClient
objects instead ofConnection
andReplicaSetConnection
classes (tang0th). - #17 Now requiring at least PyMongo version 2.4 (tang0th).
- #17 The wrapper
class
flask_pymongo.wrappers.Connection
is renamed toflask_pymongo.wrappers.MongoClient
(tang0th). - #17 The wrapper
class
flask_pymongo.wrappers.ReplicaSetConnection
is renamed toflask_pymongo.wrappers.MongoReplicaSetClient
(tang0th). - #18
MONGO_AUTO_START_REQUEST
now defaults toFalse
when connecting using a URI.
0.1.4: December 15, 2012
- #15 Added support
for
MONGO_MAX_POOL_SIZE
(Fabrice Aneche)
- #15 Added support
for
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
0.1: December 21, 2011
- Initial Release
Contributors: