MongoEngine

简介

与同样是连接MongoDB数据库的pymongo相比,我认为mongoengine更合适

连接数据库

MongoEngine 提供 connect() 函数来连接到正在运行的 mongodb 服务器实例。

from mongoengine import connect
connect(‘mydata.db’)  # mydata.db为数据库名称

默认情况下,MongoDB 服务器在本地主机和端口 27017 上运行。如果要自定义,应该向 connect() 提供主机和端口参数 −

connect('mydata.db', host='192.168.1.1', port=12345) 

如果数据库需要身份验证,则应提供凭据,例如用户名、密码和 authentication_source 参数。

connect('mydata.db', username='user1', password='***', authentication_source='admin')

MongoEngine 还支持 URI 样式连接而不是 IP 地址。

connect('mydata.db', host='mongodb://localhost/database_name')

MongoEngine 还允许连接多个数据库。 您需要为每个数据库提供唯一的别名。 例如,以下代码将 Python 脚本连接到两个 MongoDB 数据库。

connect(alias='db1', db='db1.db')
connect(alias='db2', db='db2.db')

Document 文档类

MongoEngine 被称为 ODM(对象文档映射器)。 MongoEngine 定义了一个文档类。 这是一个基类,其继承类用于定义存储在 MongoDB 数据库中的文档集合的结构和属性。 该子类的每个对象在数据库中形成 Collection 中的 Document。

此 Document 子类中的属性是各种 Field 类的对象。 以下是典型文档类的示例 −

from mongoengine import *
class Student(Document):
   studentid = StringField(required=True)
   name = StringField(max_length=50)
   age = IntField()
   def _init__(self, id, name, age):
      self.studentid=id,
      self.name=name
      self.age=age

这看起来类似于 SQLAlchemy ORM 中的模型类。 默认情况下,数据库中 Collection 的名称是 Python 类名称转换为小写后的名称。 但是,可以在 Document 类的元属性中指定不同的集合名称。 

meta={collection': 'student_collection'}

现在声明此类的对象并调用 save() 方法将文档存储在数据库中。

s1=Student('A001', 'Tara', 20)
s1.save()

 动态模式

MongoDB 数据库的优点之一是它支持动态模式。 要创建支持动态模式的类,请从 DynamicDocument 基类继承它。 以下是具有动态模式的学生类 −

class student(DynamicDocument):
    name=StringField()

第一步是像以前一样添加第一个 Document。

s1=student()
s1.name="Tara"
connect('mydb')
s1.save()

现在向第二个文档添加另一个属性并保存。

s2=student()
setattr(s2,'age',20)
s2.name='Lara'
s2.save()

Document类的其他参数如下表 −

objects在访问时延迟创建的 QuerySet 对象。
cascade_save()递归保存文档中的所有引用和通用引用。
clean()用于在运行验证之前进行文档级数据清理的挂钩。
create_index()如果需要,创建给定的索引。
drop_collection()从数据库中删除与此文档类型关联的整个集合。
from_json()将 json 数据转换为 Document 实例。
modify()对数据库中的文档执行原子更新,并使用更新后的版本重新加载文档对象。
pk获取主键
save()将文档保存到数据库。 如果文档已经存在,它将被更新,否则将被创建。 返回保存的对象实例。
delete()从数据库中删除当前文档。
insert()执行批量插入操作。

文档字段

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值