mongoengine操作mongodb的使用笔记
参见mongoengine文档
- 1 安装mongoengine
pip install -U mongoengine
- 2 在python3.5中创建连接
mongoengine.connect(db = None,alias =’default’,** kwargs )
- 2.1如果使用的时本地连接,则由’db’参数指定的数据库,直接连接数据库例如:
mongoengine.connect(‘testdb’)
- 2.2如果数据库不在localhost的默认端口上运行,也可以在此处提供连接设置(如果需要验证,请提供用户名和密码参数。):
|
|
参数:
alias - 将用于在MongoEngine中引用此连接的名称 name - 要使用的特定数据库的名称 host - 要连接的mongod实例的主机名 port - mongod实例正在运行的端口 read_preference - 集合的读取首选项**添加pymongo 2.1 username - 要进行身份验证的用户名 密码 - 要验证的密码 authentication_source - 要进行身份验证的数据库 authentication_mechanism - 数据库认证机制。默认情况下,对MongoDB 3.0及更高版本使用SCRAM-SHA-1,对较旧的服务器使用MONGODB-CR(MongoDB Challenge Response协议)。 is_mock - 明确使用mongomock进行连接(也可以使用mongomock://作为db主机前缀) kwargs - 要传递到pymongo驱动程序的特定参数,例如maxpoolsize,tz_aware等。有关完整列表,请参阅pymongo的MongoClient文档。
mongoengine在python中的基本使用:
新增(save)
创建py文件testmongo.py 类为TestCategories ,TestCategories类似存入mongodb数据库中的表:
import mongoengine class TestCategories(mongoengine.Document): # 用户信息地址 user_url = mongoengine.StringField() # 用户名 user_name = mongoengine.StringField() # 用户居住所在地 user_locations = mongoengine.ListField()
在另一个py文件创建一个测试文件 test.py:
from src.testmogo import TestCategories from mongoengine import * connect('test') cate = TestCategories() cate.user_url = 'hello' cate.user_name= 'python' cate.user_locations = ['llf'] cate.save()
执行 test.py文件查看 数据库结果:
查询
对于objects的到只是一个queryset类(QuerySet),这类里面有丰富的信息,存放所有查询到的 document对象(TestCategories)的list集合。可以使用for in list 语法将查询到的类对象里的数据灵活拼接成一个新的dict或list。
obj = TestCategories.objects(user_url='123')
#<class 'mongoengine.queryset.queryset.QuerySet'>
print(type(obj))
#<TestCategories:TestCategoriesobject>
print(obj)
for i in obj:
print(i.user_url)
更新
安装 django的web框架后 有update()等方法。
obj = TestCategories.objects(user_url='123')获得的就是对应的document。
obj.user_url = '321'
obj.update()
常规更新:
obj = TestCategories.objects(user_url='123')
#<class 'mongoengine.queryset.queryset.QuerySet'>
print(type(obj))
#[<TestCategories: TestCategories object>, <TestCategories: TestCategories object>]
print(obj)
for obj in objs:
print(obj.user_url)
# 直接操作 obj(TestCategories)对象 ,修改对应的字段值,更新!
obj.user_name = 'xx'
obj.save()