MongoEngine是MongoDB的一個ODM(Object-Document Mapper)框架,它提供了類似Django的語法來操作MongoDB數據庫
1.安裝:
pip install mongoengine
2.定義類:
import random
from mongoengine import *
connect(host="mongodb://localhost:27017/", connect=False) # 需要有默認連接
connect(host="mongodb://localhost:27017/userInfo", alias="userInfo", connect=False)
class UserInfo(DynamicDocument):
"""
用戶遊戲任務相關信息
"""
uid = SequenceField(primary_key=True) # 自增id
create_time = StringField(max_length=100) # 賬號創建時間
device_id = StringField(max_length=100) # 設備id
city = StringField(max_length=50) # 城市
gender = IntField() # 性別
province = StringField(max_length=50) # 省份
country = StringField(max_length=50) # 國家
headimg = StringField(max_length=200) # 頭像
role = StringField(max_length=100) # 用戶身份
nick_name = StringField(max_length=100) # 暱稱
phone = StringField(max_length=100) # 手機號
real_name = StringField(max_length=100) # 真名
id_card = StringField(max_length=200) # 身份證號
# shard_key 爲分片key,在使用mongo分片集羣的時候需要配置並且在項目首次上線之前在mongo中手動聲明分片庫和分片集合
meta = {"collection": "userInfo", "db_alias": "userInfo", "shard_key": ("uid",)}
3.插入數據
import time
user = UserInfo(create_time=time.strftime("%Y-%m-%d %H:%M:%S"), device_id="21c267a9-c04d-38de-a0c0-641366ed5e43")
user.country = "中國"
user.city = "北京"
user.age = 18
user.save()
# 插入後的示例數據 主鍵uid在mongo中爲_id
# { "_id" : 1, "create_time" : "2020-03-04 09:06:28", "device_id" : "21c267a9-c04d-38de-a0c0-641366ed5e43", "city" : "北京", "country" : "中國",age: 18 }
4.查詢數據
# 查單條數據,如果沒有會報錯
user = UserInfo.objects.get(_id=1)
print(user.uid, user.country, user.city)
# 查詢多條,返回列表,如果沒有數據返回空列表
user = UserInfo.objects(_id=1)
for i in user:
print(i.uid, i.country, i.city)
# 操作符格式 字段__操作符=查詢條件
# 創建時間大於2020-03-04 12:07:04的數據
user = UserInfo.objects(create_time__gte="2020-03-04 12:07:04")
for i in user:
print(i.uid, i.country, i.city)
'''
常用操作符
* ne 不等於 age__ne=18
* gt(e) 大於(等於) create_time__gte="2020-03-04 12:07:04"
* lt(e) 小於(等於) create_time__lte="2020-03-04 12:07:04"
* not 對操作符取反,比如 age__not__gt=18
* in 後面是一個列表,比如 city__in=["北京","上海"],找出這兩個城市的數據,若都不存在,返回空列表。
* nin in取反 age__nin=[18]
* mod 取模,比如 age__mod=(2,0) 表示查詢出age除以2,餘數是0的數據
'''
# 通過Q對象查詢多個條件 |或,& 與
from mongoengine.queryset.visitor import Q
user = UserInfo.objects(Q(city="北京")|Q(age=17))
for i in user:
print(i.uid, i.country, i.city, getattr(i, "age", 0))
5.修改數據
user = UserInfo.objects.get(_id=1)
user.age = 20 # 修改年齡
user.nick_name = "test" #增加暱稱字段
user.save()
6.刪除
user = UserInfo.objects(_id="10270521").delete()