标签(空格分隔): Mongodb
github地址
近来用Flask做了一个小小的Demo(目前还在做),用的是MongoDB
,ORM采用的是时Flask-MongoEngine
,虽然是叫做Flask-MongoEngine
,但其实只是对MongoEngine
的一种封装,让其成为了Flask
的扩展,所以在查找资料的时候直接找MongoEngine
的资料就可以了,然而在开发的过程中,突然发现有关的MongoEngine
的中文资料实在是太少了,作为当前比较流行NoSQL
数据库,大部分的Python Web开发者其实都是比较钟爱NoSQL的,所以今天打算翻译一下MongoEngine
的官方文档
这里我只会翻译我个人认为比较重要的部分 ,翻译不好还请原谅
(一). 安装
$ pip install mongoengine
(二). 连接数据库
flask-mongoengine
我们先来看一下flask-mongoengine中的源码,其实它就是调用的mongoengine中的connect方法
#flask-mongoengine/flask_mongoengine/connection.py
def _connect(conn_settings):
"""Given a dict of connection settings, create a connection to
MongoDB by calling mongoengine.connect and return its result.
"""
db_name = conn_settings.pop('name')
return mongoengine.connect(db_name, **conn_settings)
关于flask-mongoengine的连接数据库的方式,我就不一一列举了,可以去看它的文档,很简单
mongoengine
- 第一种方式
from mongoengine import connect
connect('project1') #project1为你要连接的数据库的名称
- 第二种方式
#如果mongo服务是在其他地方运行,可以使用这种方法
from mongoengine import connect
connect ('project1' , host = '192.168.1.35' , port = 12345 )
- 第三种方式
#如果数据库需要身份验证,username并password 应提供的参数
from mongoengine import connect
connect ('project1' , username = 'webapp' , password = 'pwd123' )
- 第四种方式(推荐)
#URI样式连接也被支持 - 只需提供URI作为host:
from mongoengine import connect
connect ('project1' , host = 'mongodb:// localhost / database_name' )
(三). 定义文件
MongoEngine允许您为文档定义模式,因为这有助于减少编码错误,并允许在可能存在的字段上定义实用方法
下面来一个给一个例子,要为文档定义模式,请创建一个继承自其的类 Document
。通过将字段对象作为类属性添加到文档类来指定字段
from mongoengine import *
import datetime
class Page(Document):
title = StringField(max_length=200, required=True)
date_modified = DateTimeField(default=datetime.datetime.utcnow)
3.1. 字段
默认情况下,字段不是必需的。要使字段成为必填字段,请将字段的required
关键字参数设置 为True
。字段也可能有可用的验证约束(max_length
例如上面的示例中)。字段也可以采用默认值,如果没有提供值,将使用默认值。默认值可以可选地是可调用的,将被调用来检索该值(例如在上面的示例中)。可用的字段类型如下所示
BinaryField
二进制数据字段
BooleanField
ComplexDateTimeField
DateTimeField
DecimalField
DictField
DynamicField
EmailField
EmbeddedDocumentField
EmbeddedDocumentListField
FileField
GridFS存储字段
FloatField
GenericEmbeddedDocumentField
GenericReferenceField
GenericLazyReferenceField
GeoPointField