在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下的subprocess模块的入门指引
Apr 16 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
python实现周期方波信号频谱图
Jul 21 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
python实现字符串加密成纯数字
Mar 19 Python
python 三元运算符使用解析
Sep 16 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
python常用数据重复项处理方法
Nov 22 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 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
桌面中心(二)数据库写入
2006/10/09 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
python学习之matplotlib绘制散点图实例
2017/12/09 Python
Python3 中文文件读写方法
2018/01/23 Python
python binascii 进制转换实例
2019/06/12 Python
python 同时读取多个文件的例子
2019/07/16 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
理工类毕业自我鉴定
2014/02/20 职场文书
一年级小学生评语
2014/04/22 职场文书
春节晚会开场白
2015/05/29 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python
redis数据结构之压缩列表
2022/03/21 Redis