Django 模型-Model
2020-11-02 本文已影响0人
早_wsm
Django
内所有数据库内的表都可以通过写入model.py
创建类来实现,Django
通过models
文件来实现与数据库的交互
创建模型的俩种方式:
创建类模型
class Person(models.Model):
# 约束内容为长度16,name唯一,列名自定义为'name'
p_name = models.CharField(max_length=16,unique=True,db_column='name')
p_age = models.IntegerField(default=18,db_column='age')
# False代表男,默认为男
p_sex = models.BooleanField(default=False,db_column='sex')
# 添加元信息改变表的名称
class Meta:
db_table = 'hao'
image.png
使用object.create
创建对象
def new_person(request):
person = Person.objects.create(p_age=19,p_name='jack',p_sex=True)
person.save()
return HttpResponse("创建成功")
数据库操作
添加数据
添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:
# 使用save函数进行保存数据
def testdb(request):
test1 = Test(name='runoob')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
查询数据
返回查询集的方法称为过滤器
objects
用于过滤的几种方式:
- all()
返回所有数据集 - filter()
返回符合筛选条件的数据集 - exclude()
返回不符合条件的数据集 - order_by()
排序 - values()
一条数据就是一个字典,返回一个列表 - 通过切片的方式获取数据集
# 获取第5到第15条数据
person = models.Person.objects.all()[5:15]
示例:
# 查询所有数据集并按照p_age倒序排序
person = models.Person.objects.all().order_by(’-p_age’)
几种返回单个数据的方式:
- get()
会返回一个满足条件的对象,但是如果没有找到符合条件的对象,会引发模型类DoesNotExist异常,如果找到多个,会引发模型类MultiObjectsReturnet异常,所以一般不推荐使用 - first()
返回查询集中第一个对象 - last()
返回查询集中最后一个对象 - count()
返回当前查询集中对象个数 - exists()
判断查询集中是否有数据,如果有数据返回True
示例:
# 根据objects.filter过滤筛选限定条件后取出数据集中的第一个对象
models.类模型.objects.filter(限定条件).first()
更新数据
修改数据可以使用 save() 或 update()函数来完成
# 数据库操作
def testdb(request):
# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google'
test1.save()
# 另外一种方式
#Test.objects.filter(id=1).update(name='Google')
# 修改所有的列
# Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")
删除数据
删除数据库中的对象只需调用该对象的delete()方法即可:
# 数据库操作
def testdb(request):
# 删除id=1的数据
test1 = Test.objects.get(id=1)
test1.delete()
# 另外一种方式
# Test.objects.filter(id=1).delete()
# 删除所有数据
# Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")
模型中的字段类型
字段类型 | 含义 |
---|---|
AutoField | 一个自增长的IntegerField,作为主键自动添加到模型中 |
CharField | 字符串,限定长度(max_length),默认表单样式Textinput |
TextField | 大文本字段,一般超过4000使用 |
IntegerField | 整数 |
FloadField | 浮点数 |
BooleanField | true/false字段 |
NullBooleanField | null/true/false |
DateField | 日期 |
TimeField | 时间 |
DateTimeField | 日期+时间 |
FileField | 一个上传文件的字段,存放文件的路径 |
ImageField | 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保他是个有效的image |
ManyToManyField | 多对多 |
ForeignKey | 一对多 |
模型中常用的字段选项:
字段选项 | 含义 |
---|---|
null(null=True|False) | 数据库字段的设置是否可以为空(数据库进行验证) |
blank(blank=True|False) | 字段是否为空django会进行校验(表单进行验证) |
choices | 轻量级的配置字段可选属性的定义 |
default | 字段的默认选项 |
help_text | 字符按文字帮助 |
primary_key(=True|False) | 一般不需要定义是否为主键,如果没有指明主键的话,django胡自动添加一个默认主键:id=models.AutoField(primary_key=True) |
unique | 是否唯一(对于数据表而言) |
verbose_name | 字段的详细名称,若不指定该属性,默认使用字段的属性名称 |
PositiveIntegerField | 类似 IntegerField, 但取值范围为非负整数(这个字段应该是允许0值的…可以理解为无符号整数) |