在Python中使用MongoEngine操作数据库教程实例


Posted in Python onDecember 03, 2019

这篇文章主要介绍了在Python中使用MongoEngine操作数据库教程实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

pymongo来操作MongoDB数据库,但是直接把对于数据库的操作代码都写在脚本中,这会让应用的代码耦合性太强,而且不利于代码的优化管理

一般应用都是使用MVC框架来设计的,为了更好地维持MVC结构,需要把数据库操作部分作为model抽离出来,这就需要借助MongoEngine

MongoEngine是一个对象文档映射器(ODM),相当于一个基于SQL的对象关系映射器(ORM)

MongoEngine提供的抽象是基于类的,创建的所有模型都是类

安装

pip install mongoengine

使用时先声明一个继承自MongoEngine.Document的类

在类中声明一些属性,相当于创建一个用来保存数据的数据结构,即数据已类似数据结构的形式存入数据库中,通常把这样的一些类都存放在一个脚本中,作为应用的Model模块

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)

users = Users.objects.all() #返回所有的文档对象列表
for u in users:
  print("name:",u.name,",age:",u.age)

在Python中使用MongoEngine操作数据库教程实例

保存文档

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
user1 = Users(
  name='zz',
  age= 11
)
user1.save()  
print(user1.name)
user1.name = 'zz11'
user1.save()    
print(user1.name)

在Python中使用MongoEngine操作数据库教程实例

查询10=<年龄<30的,按姓名排列

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
user_search = Users.objects(age__gte=10, age__lt=33).order_by('name')
for u in user_search:
  print("name:",u.name,",age:",u.age)

在Python中使用MongoEngine操作数据库教程实例

查询10=<年龄<30的,按姓名倒序

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
user_search = Users.objects(age__gte=10, age__lt=33).order_by('-name')
for u in user_search:
  print("name:",u.name,",age:",u.age)

在Python中使用MongoEngine操作数据库教程实例

查询name=zz11

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)

tmp = Users.objects(name="zz11")
for u in tmp:
  print("name:",u.name,",age:",u.age)

在Python中使用MongoEngine操作数据库教程实例

修改name=zz11的age加1

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
tmp = Users.objects(name="zz11").update(inc__age=1)
tmp = Users.objects(name="zz11")
for u in tmp:
  print("name:",u.name,",age:",u.age)

在Python中使用MongoEngine操作数据库教程实例

修改name=zz11的age设为55

from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)

tmp = Users.objects(name="zz11").update(set__age=55)
tmp = Users.objects(name="zz11")
for u in tmp:
  print("name:",u.name,",age:",u.age)

在Python中使用MongoEngine操作数据库教程实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
python解决网站的反爬虫策略总结
Oct 26 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
python 解压pkl文件的方法
Oct 25 Python
Django组件content-type使用方法详解
Jul 19 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
python 实现按对象传值
Dec 26 Python
Python实现查找数据库最接近的数据
Jun 08 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 #Python
python单向循环链表原理与实现方法示例
Dec 03 #Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 #Python
Python常用模块os.path之文件及路径操作方法
Dec 03 #Python
Python中顺序表原理与实现方法详解
Dec 03 #Python
python双向链表原理与实现方法详解
Dec 03 #Python
Python读取实时数据流示例
Dec 02 #Python
You might like
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
PHP闭包函数详解
2016/02/13 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
PHP 实现重载
2021/03/09 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
js实现网页收藏功能
2015/12/17 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
python实现决策树ID3算法的示例代码
2018/05/30 Python
python绘制立方体的方法
2018/07/02 Python
pandas值替换方法
2018/07/10 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
Python魔术方法专题
2020/06/19 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
易程科技软件测试笔试
2013/03/24 面试题
个人自荐信
2013/12/05 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
土地转让协议书
2014/09/27 职场文书
金榜题名主持词
2015/07/02 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript