Django之Mongodb mongoengine使用大全(持续更新)

链接MongoDB方法,需要在settings.py数据配置那里设置
1、本地连接
from mongoengine import connect
connect('mongodb', host='远程服务器IP地址', post=开放的端口号)

2、URL方式连接数据库,可以支持本地和远程
from mongoengine import connect
connect('mongodb', host='mongodb://用户名:密码@服务器IP地址database_name')

【使用Mongodb mongoengine不用执行迁移文件,可以直接使用】

BinaryField():二进制类型
BooleanField():布尔类型
ComplexDateTimeField():精确毫秒级时间类型
DateTimeField():时间类型
DecimalField():定点十进制
DictField():字典类型
DynamicField():动态字段类型
EmailField():邮箱地址字段
EmbeddedDocumentField
FileField():GirdFS存储字段
FloatField():浮点数类型
GenericEmbeddedDocumentField():通用嵌入式文档
GenericReferenceField():
GeoPointField():
ImageField():图像文件存储字段
IntField():32位整数类型,(min_value=None,max_value=None)
ListField():列表。列表里还可以传入字段规定列表内的字段类型,例如ListField(StringField(max_length=30))

LongField():64位整数类型
MapField():名称映射到指定字段
ObjectIdField():Mongodb自动生成的ID字段,自动设为主键
ReferenceField():这是一个保存相关文档的filed,参照类型
SequenceField():自动产生一个数列、 递增的,使用后会自动生成一个叫counters的新表
SortedListField():排序的列表字段,确保始终检索为已排序的列表
StringField():字符串,(regex=None,max_length=None,min_lenght=None) 
URLField():字符串类型,Django Admin 以及 ModelForm 中提供验证 URL
UUIDField():对应char(32)。除了在PostgreSQL中使用的是uuid类型外,在其他数据库中均是固定长度char(32),用来存放生成的唯一id。字符串类型,Django Admin 以及 ModelForm 中提供对 UUID 格式的验证

字段通用参数:
max_length,最大长度。
null #赋值是否可以为空

db_field (默认值:无) # MongoDB字段名称
required (默认值:False) # 是否必须填写,如果设置为True且未在文档实例上设置字段,则在ValidationError验证文档时将引发
default (默认值:无) # 默认值
unique (默认值:False) # 是否唯一,如果为True,则集合中的任何文档都不具有此字段的相同值
unique_with (默认值:无) # 唯一 字段列表
primary_key (默认值:False) # 主键
choices (默认值:无) # 限制​​该字段的值(例如列表,元组或集合)
validation (可选的) # 可调用以验证字段的值。callable将值作为参数,如果验证失败,则应引发ValidationError

ValidationError:验证提示


关联设置:
mongoengine.DO_NOTHING
这是默认值不做任何事。在删除的时候速度比较快,但是会带来数据不一致和空引用的问题。

mongoengine.DENY
如果仍有document引用到这个对象,那么会阻止删除

mongoengine.NULLIFY
任何对象的字段关联到这个对象的如果被删除,那么这个document也会被删除,关联关系作废。

mongoengine.CASCADE
任何对象的字段引用到这个对象的会被先删除

mongoengine.PULL
移除对于对象的引用关系

实际应用:
class correlation(Document):
       #这里写字段和数据类型
       profile_page = ReferenceField('ProfilePage', reverse_delete_rule=mongoengine.NULLIFY)


实际应用:
import datetime
import mongoengine


# 继承Document类,为普通文档,如果是EmbeddedDocument类是内嵌文档,DynamicDocument类是动态文档
class Mongodb_Books(mongoengine.Document):
    """
    在Mongodb的表里ID是自动生成的所以这里不用写id,但是!这里创建的_id与自增Id不同,它是
    ObjectID长度为12字节,由几个2 - 4字节的链组成。每个链代表并指定文档身份的具体内容。以下的值构成了完整的12字节组合:
    一个 4 字节的值,表示自 Unix 纪元以来的秒数
    一个 3 字节的机器标识符
    一个 2 字节的进程 ID
    一个 3 字节的计数器,以随机值开始
    """
    # _id = mongoengine.ObjectIdField()
    # 正常ID生成使用.SequenceField(),如果字段名不是_id在表中就会生成新的字段,并且不是主键,如果是_id就会在
    # Mongodb ObjectID上自动把原有生成12字节的值,自动生成正常ID值。同时,会生成一个counters表,它是专门处
    # 理id自增的表,它会结合Mongodb_Books来自动处理正常的ID值。
    id = mongoengine.SequenceField(primary_key=True)
    # numbers = mongoengine.IntField(auto_created=True, blank=True)
    # 图书种类:如果用默认值就必须得用max_length
    booksspecies = mongoengine.StringField(max_length=6, default='计算机')
    # 图书名称,null=False:不允许为空值,unique=True:不允许重复
    booksname = mongoengine.StringField(max_length=16, null=False, unique=True)
    # 图书几本
    booksnumber = mongoengine.IntField(null=False)
    # 图书国籍:中国,美国,英国
    bookscountry = mongoengine.StringField(max_length=4, null=False)
    # 图书是否入库:默认值没有入库
    booksstorage = mongoengine.BooleanField(default=False)
    # 图书价格
    booksmoney = mongoengine.StringField(max_length=10, null=False)
    # 添加图书时间:auto_now_add:第一次创建的时候自动设置当前日期,默认值:false
    bookstimes = mongoengine.DateTimeField(default=datetime.datetime.now)


    class Meta:
        db_table = 'Mongodb_Books'

你可能感兴趣的:(Python3.8,Django2.2.7,mongodb,django)