python mongoengine 使用

MongoEngine是一个PythonODM工具,用于操作MongoDB,提供了类似DjangoORM的API。文章介绍了如何安装、建立数据库连接、创建Model、执行增删改查操作,以及使用Q对象进行复杂查询。此外,还涉及到了索引、聚合、连表查询、事务处理和时区管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoEngine 是一个使用 Python 语言操作 MongoDB 的对象文档映射(ODM)工具。它提供了一组类似于 Django ORM 的 API,可以让开发者使用 Python 代码来操作 MongoDB 数据库。

1.安装 mongoengine
pip install mongoengine
2.建立数据库连接并且创建model
from mongoengine import connect

connect(db='mydb')

可选的参数有:

  • host: 数据库所在的主机地址,默认为 ‘localhost’。
  • port:数据库监听的端口,默认为 27017。
  • username:用于连接数据库的用户名,如果没有设置用户名和密码,可以省略。
  • password:用于连接数据库的密码。
  • authentication_source:验证的数据库。
  • authentication_mechanism:验证的机制。
from mongoengine import Document, StringField

class User(Document):
    name  = StringField()
    email = StringField()
    meta = {
   
    	'db_alias': 'mydb1',		#指定数据库
        'collection': 'collection',	#指定 model 对应的集合名称,默认为 model 的类名。
        'ordering': ['-created_at'],#指定 QuerySet 的默认排序顺序。-是降序
        'indexes': [{
   'fields': ['name'], 'unique': True},] #索引配置
    }

meta属性常用参数:

'db_alias': 'mydb1',#指定数据库
'collection': 'collection',#指定 model 对应的集合名称,默认为 model 的类名。
'ordering': ['-created_at'],#指定 QuerySet 的默认排序顺序。-是降序
'primary_key':'field', #指定文档字段为主键,可以是 boolean 或 Field 实例
'collection_class':calss, #可以用来指定一个自定义的集合类来代替默认的 QuerySet 类。
'default_values':{'field':'value'}, #指定文档字段为主键,可以是 boolean 或 Field 实例
'indexes': [{'field': ['name'], 'unique': True},] #索引配置

collection_class的用法

默认情况下,Mongoengine 使用 mongoengine.queryset.QuerySet 类作为 model 的集合类。
这个类包含了常用的查询操作,如查询、过滤、排序、分页等。

如果你想为某个特定 model 定义自己的集合类,你可以继承 mongoengine.queryset.QuerySet 类并实现新的方法和属性。
然后在 model 的 meta 属性中指定 collection_class 参数来使用这个类

from mongoengine import queryset

class MyQuerySet(queryset.QuerySet):
    def get_adults(self):
        return self.filter(age__gte=18)

class User(Document):
    name = StringField()
    age = IntField()
    meta = {
   
        'collection_class': MyQuerySet
    }

3.增
from model import User

#根据meta的indexes属性创建索引,只需要执行一次即可
User.create_indexes()
#save新增记录
user = User(name='John Doe')
user.save()
#新增一条记录
user = {
   'name': 'John', 'email': 'john@example.com'}
result = User.objects.insert_one(user)
#新增多条
users = [{
   'name': 'John', 'email': 'john@example.com'},
         {
   'name': 'Jane', 'email': 'jane@example.com'},
         
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值