mongodb在python中的应用——利用pymongo和mongoengine

一、前文

Django 是一种 Python Web 框架,由对象关系映射器 (ORM)、后端控制器和模板系统组成。MongoDB 是一种面向文档的数据库(也称为 NoSQL 数据库),能有效地进行扩展并提供高性能。在本文中,我们将学习如何从 Python 调用 MongoDB(使用 MongoEngine),以及如何将它集成到 Django 项目中以代替内置的 ORM。

NoSQL 数据库是 “下一代数据库,主要具有以下几个要点:非关系型、分布式、开放源码和可水平伸缩”。面向文档的数据库 MongoDB 就是这种类型的数据库。要添加对 MongoDB 的支持非常容易,但要以失去自动管理面板为代价。因此,您必须根据您的需要进行权衡。

MongoDB 是一种无模式数据库,与关系型数据库完全相反。无模式数据库没有使用表格,而是使用由文档组成的集合。这些文档是使用对象字面量语法创建的。

可参考:

http://www.zhihu.com/question/20059632

http://www.csdn.net/article/2014-03-06/2818652-when-use-mongodb-rather-mysql

二、工程需求

Django 通过mongoengine库调用mongoDB,由于mongoengine底层使用的是pymongo库,所以安装mongoengine的时候一定要安装与其版本配套的pymongo版本。几条命令,分别用于安装pymongo,mongodb,关/开mongodb服务,若easy_install安装不成功,就要安装easy_install工具:

easy_install pymongo
apt-get install mongodb
service mongodb stop/start

第一部分:

pymongo

<pre name="code" class="html">import pymongo
con=pymongo.Connection('127.0.0.1',27017) #连接到数据库
db=con.cimcc  #获取数据库
db.authenticate('username','password')
collection=db.cimcc_user #获得表

举例子应用:

1、查找

collection.find({‘level‘:2,‘userid‘:int(float(item))})

返回list,下面2有示例

2、降序排序,获取键值

for i in collection.find().sort([("userid",-1)]):

userid=i[‘userid‘]+userid

3、插入数据项

collection.insert({‘userid‘:1})

4、更新

collection.update({‘userid‘:int(float(item))},{‘$set‘:{‘status‘:1}},upsert=False,multi=True)

有兴趣可以研究一下update的四个参数,第一个为匹配,第二个为条件(条件上可以大作文章),第三个为没找到是否插入,第四个为是否支持多操作

pymongo够直接,但脱离了python web设计的本意,django也是mvc设计的典型例子,然后利用pymongo就不能很好地体现这点,耦合度较高。

第二部分:

mongoengine

其实开始我是打算用django-nonrel,因为利用其可以再内存中模拟ORM,继承models.Model,管理者admin就有一个可视化管理数据库的界面(自带),也可以利用Model的函数映射到mongodb,但想想就好,后来没能成功装上,估计被墙了。后来发现知乎有人说:

django的ORM并不支持NoSQL,但是有一个叫django-nonrel的分支,扩展了django的ORM,支持部分NoSQL数据库,其中包括mongodb

从我最后一次关心django-nonrel时它的可用度来看,实际生产环境使用还是很困难。比如说:

  1. mongodb类NoSQL天然没有join操作,所以在django-nonrel中使用mongodb时没有多表继承功能,只能从abstract类继承
  2. 没有join的操作也意味着很多atomic的SQL查询需要转换成非atomic的nosql查询
  3. 很多原ORM的特性在django-nonrel中使用会抛出NotImplemented的异常。

所以正常情况下请勿使用django-nonrel提供的nosql支持(除非你有兴趣给它贡献代码)

http://www.zhihu.com/question/19818326

于是我还是用了mongoengine,继承Document而不是models.Model,效果也还行。

from mongoengine import *
connect('database',host='127.0.0.1',username='username',password='password')

# Create your models here.
class cimc_message(Document):
	msg_from=StringField(required=True)
	to=IntField(required=True)
	msg_type=StringField(required=True)
	status=IntField(required=True)
	result=IntField(required=True)
	def insert(self):
		self.save()

1、get_or_create

cimc_message.objects.get_or_create(msg_from=‘admin‘,to=‘xiaoming‘,msg_type=‘type1‘,status=0,defaults=msg_dic)

找到匹配条件就返回该条数据,否则就插入defaults,defaults为字典

2、delete

cimc_message.objects(msg_from=‘admin‘,to=‘xiaoming‘,msg_type=‘type1‘,status=0).delete()

...其他的举一反三,边用边找

时间: 2024-10-12 20:51:04

mongodb在python中的应用——利用pymongo和mongoengine的相关文章

MongoDB的Python客户端PyMongo(转)

原文:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便熟悉一下MongoDB这样的非关系型数据库.Python让我觉得轻松,再和MongoDB搭配上,那感觉真是好. 下面就谈谈Python操作MongoDB的一些基本用法,先介绍一下MongoDB,这是现在风头正劲的NoSQL

初窥Python(一)——使用pymongo连接MongoDB

Python 可以使用 pymongo 库方便的操作 MongoDB .插播一句,MongoDB 不同于关系型结构的三层结构--database--> table --> record,它的层级为 database -->collection --> document .这里不重点介绍 MongoDB  用法,主要来看一下如何用 Python 使用 MongoDB. 1.安装MongoDB和pymongo: [[email protected] ~]# pip install py

python中利用正则表达式匹配ip地址

现在有一道题目,要求利用python中re模块来匹配ip地址,我们应如何着手? 首先能想到的是ip地址是数字,正则表达式是如何匹配数字的呢? \d或[0-9] 对于这个问题,不要一下子上来就写匹配模式,应该一步步分解,把复杂的问题简单化 比如ip地址,我们可以总结一下规律 1. 它是一个字符串 2. 字符串内部是由4个1-3位的数字和3个.组成 3. 数字的范围是0-255 接下来,我们先试一下匹配第1个数字 第一步:尝试匹配192.168.100.123中的192 >>> import

$Django 路飞之redis内存数据库安装,python中使用,与Memcached,mongodb的区别

一 redis内存数据库安装 二 python中使用 三 redis,Memcached,mongodb的对比 原文地址:https://www.cnblogs.com/3sss-ss-s/p/10177083.html

Python中利用Tesseract软件来识别图片中的英文与中文

OCR与Tesseract介绍   将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制. Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司).Tesseract 是目前公认最优秀.最精确的开源OCR 系统. 除了极高的精确度,Tesseract 也具有很高的灵活性.它

mongodb与python随手记

在python中使用pymongo连接mongodb数据库. 基本代码如下: from pymongo import MongoClient client = MongoClient('127.0.0.1', 27017) # mongodb的地址 db_name = 'myfirstmongo' # 数据库的名字 db = client[db_name] # 现在db就是这个数据库了 collection = db['testone'] # 'testone'是集合的名字,现在collecti

mongodb和python的datetime的差异

python中需要使用utc时间 mongo.exe命令 db.sms_ttl.ensureIndex({"createdAt": 1}, {expireAfterSeconds: 600}) pymongo操作 db.sms_ttl.insert({"createdAt": datetime.utcnow(), "type": "sms-auth", "phone":"", "

MongoDB与python交互

1.Pymongo PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式.官方文档 2.安装 进入虚拟环境 sudo pip install pymongo 或源码安装 python setup.py 3.使用 导入模块 import pymongo #或者 from pymongo import MongoClient 建立于MongoClient 的连接: client = MongoClient('localhost', 27017) # 或

Python中的切片操作

Python中的切片操作功能十分强大,通常我们利用切片来进行提取信息,进行相关的操作,下面就是一些切片的列子,一起来看看吧,希望对大家学习python有所帮助. 列如我们从range函数1-100中取7的倍数,函数及结果如下所示: >>> for i in range(1,100)[6::7]: print i 7 14 21 28 35 42 49 56 63 70 77 84 91 98 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: >>