链接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'