mongodbengine 使用记录

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的默认端口上运行,也可以在此处提供连接设置(如果需要验证,请提供用户名和密码参数。):
1
mongoengine.register_connection(alias,name = None,host = None,port = None,read_preference = Primary(),username = None,password = None,authentication_source = None,authentication_mechanism = None,** kwargs )
  • 参数:

    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。

参考:Python中QuerySet和Objects类

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()

删除