MongoDB就是多个集合组成的数据库,而每一个集合又是由多个文档组成。
文档:
#类似于{"_id":ObjectId("5d2944d421b631f231d08056"),"username":"李阳","password":"123456","age":25,"gender":"male","dept":[{"title":"生产部"},{"title":"品质部"}]}#这样的被称为文档#文档是可嵌套的#文档中key值唯一、区分大小写、并且不可重复#文档中的键值对是有序的集合:
#集合就是一组文档#文档类似于关系库里的行#集合类似于关系库里的表#集合中的文档无需固定的结构(非关系型)一、环境安装
1、pymongo安装
(automatic)C:\Users\Administrator>pipinstallpymongo2、检测是否安装成功
(automatic)C:\Users\Administrator>pythonPython3.5.2(v3.5.2:4def2a2901a5,Jun252016,22:18:55)[MSCv.190064bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>importpymongo>>>二、python操作MongoDB
1、安装mongoengine模块
(automatic)C:\Users\Administrator>pipinstallmongoengine2、检测是否安装成功
(automatic)C:\Users\Administrator>pythonPython3.5.2(v3.5.2:4def2a2901a5,Jun252016,22:18:55)[MSCv.190064bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>importmongoengine>>>3、模型介绍
mongoengine模块相当于mysql数据库中的sqlalchemy模块,对数据库进行一种对象化的操作,比起原生的操作来的更加方便。
(1)数据类型
BinaryFieldBooleanFieldComplexDateTimeFieldDateTimeFieldDecimalFieldDictFieldDynamicFieldEmailFieldEmbeddedDocumentFieldEmbeddedDocumentListFieldFileFieldFloatFieldGenericEmbeddedDocumentFieldGenericReferenceFieldGenericLazyReferenceFieldGeoPointFieldImageFieldIntFieldListFieldMapFieldObjectIdFieldReferenceFieldLazyReferenceFieldSequenceFieldSortedListFieldStringFieldURLFieldUUIDFieldPointFieldLineStringFieldPolygonFieldMultiPointFieldMultiLineStringFieldMultiPolygonField每个字段类型都可以设置参数:
db_field(默认值:无)#MongoDB字段名称。required(默认值:False)#如果设置为True且未在文档实例上设置字段,则在ValidationError验证文档时将引发a。default(默认值:无)#未为此字段设置值时使用的值。unique(默认值:False)#如果为True,则集合中的任何文档都不具有此字段的相同值。unique_with(默认值:无)#字段名称(或字段名称列表)与此字段一起使用时,集合中不会有两个具有相同值的文档。primary_key(默认值:False)#如果为True,请使用此字段作为集合的主键。DictField和EmbeddedDocuments都支持作为文档的主键。choices(默认值:无)#应该限制该字段的值的可迭代(例如列表,元组或集合)选择。#例如:SIZE=(('S','Small'),('M','Medium'),('L','Large'),('XL','ExtraLarge'),('XXL','额外超大'))classShirt(Document):size=StringField(max_length=3,choices=SIZE)**kwargs(可选的)#可以提供其他元数据作为任意其他关键字参数。但是,您无法覆盖现有属性。常见的选择包括help_text和verbose_name,它们通常由表单和窗口小部件库使用。(2)创建模型
frommongoengineimportconnect,Document,StringField,IntField,EmbeddedDocument,ListField,EmbeddedDocumentFieldconnect('userinfo')#连接数据库,默认连接本地GENDER_CHOICES=(('male','男'),('female','女'),)classDept(EmbeddedDocument):"""部门表"""title=StringField(max_length=32,required=True)classUser(Document):"""用户表"""username=StringField(max_length=32,required=True)password=StringField(max_length=64,required=True)age=IntField(required=True)gender=StringField(choices=GENDER_CHOICES,required=True)dept=ListField(EmbeddedDocumentField(Dept))#关联部门表meta={'collection':'user'#指定保存在什么文档中}上面的User表相当于集合,它是继承Document类,而dept实际是User表中的一个字段,每一个用户实例都相当于一个文档(集合中的一行数据),具体可以看生成的具体数据:
4、操作模型
在创建模型后,就需要对模型中的数据进行CURD,创建一个类来进行操作:
classMongoEngine(object):defadd_one(self):"""增加一条数据:return:"""product_department=Dept(title="生产部")quality_department=Dept(title="品质部")user_obj=User(username='李阳',password='123456',age=20,gender='male',dept=[product_department,quality_department])user_obj.save()returnuser_objdefget_one(self):"""查询一条数据"""returnUser.objects.first()defget_more(self):"""查询多条数据"""returnUser.objects.all()defget_from_id(self,id):"""根据id进行查询"""returnUser.objects.filter(pk=id).first()defupdate_one(self):"""修改单条数据"""returnUser.objects.filter(gender='male').update_one(inc__age=5)defupdate_more(self):"""修改多条数据"""returnUser.objects.filter(gender='male').update(inc__age=5)defdelete_one(self):"""删除一条数据"""returnUser.objects.filter(gender='male').first().delete()defdelete_from_id(self,id):"""根据id进行删除"""returnUser.objects.get(pk=id).delete()defdelete_more(self):"""删除多条数据"""returnUser.objects.filter(gender='male').delete()