python3之mongoengine-ORM

下载

pip install mongoengine

连接数据库

from mongoengine import *
connect("数据库名", host="127.0.0.1", port=27018, username='', password=" ",
        authentication_source="admin", authentication_mechanism="SCRAM-SHA-1")
 # authentication_source="admin", authentication_mechanism="SCRAM-SHA-1" 认证方式

定义表

from datetime import datetime
class Users(Document):
    name = StringField(required=True, max_length=200)
    age = IntField(required=True)
    is_deleted = IntField(default=0, choices=[0, 1])
    create_time = DateTimeField(default=datetime.now())
    update_time = DateTimeField(default=datetime.now())

增删改查

新增

  1. way1—save()
from loguru import logger
def insert_data(data):
	instance = Users(**data)
	res = instance.save()
	logger.debug(res)

data = {"age":"test","age":1}
insert_data(data)
  1. way2–批量插入多个文档
def many_insert():
	instances = []
	names = ["test1","test2"]
	age = 19
	for name in names:
		instances.append(Users(name=name, age=age))
	data = Users.objects.insert(instanes)
	logger.debug(data)
	
many_insert()

  1. way3–create()
def create(data):
	res = Users.objects.create(data)
	logger.debug(res)
data = {"name":"test","age":1}
create(data)

删除

def ture_delete(query):
	"""真删除"""
	queryset = Users.objects.filter(**query)
	delete_count = queryset.delete()
    logger.debug(f"查询数量:{queryset.count()}, 真删除数量:{delete_count}")
query = {"name":"test","age":1}
true_delete(query)

def false_delete(query):
	"""假删除"""
	queryset = Users.objects.filter(**query)
	update_count = queryset.update(is_deleted=1,update_time=datetime.now())
	logger.debug(f"查询数量:{queryset.count()}, 假删除数量:{update_count}")
query = {"name":"test","age":1}
false_delete(query)
	

修改

def update(query, data):
	queryset = Users.objects.filter(query)
	update_count = queryset.update(**data)
	logger.debug(f"查询数量:{queryset.count()}, 更新数量:{update_count}")
query = {"name":"test","age":1}
data = {"name":"test_modify","age":18}
data.update({"update_time":datetime.now()})
update(query)

# save 更新, save可以更新类对象格式,update无法转化类对象格式,只能更新字典类型
# save()更新只能,通过obj.name的方法进行更新,不能通过(obj.save(name="1")的方式更新。

obj = Users.objects.filter(id=_id).first()
obj.name = "修改"
obj.save()

查询

ne 不等于, 使用于字符串和数字。

other

  • 更新name值为None的时候,查询该文档,name不会出现在该文档中。数据库显示为null。做好异常处理,通过obj.get(“name”,“1”)方式获取值并给出默认值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值