常用字段类型
CharField:字符类型,必须提供max_length参数,max_length表示字符长度。
Email Field:邮箱类型,实际上是字符类型,只是提供了邮箱格式检验。
Text Field:文本类型,存储大段文本字符串。字符串如果超过254 个字符建议使用Text Field。
Integer Field:整数类型。
Date Field:日期字段。
Time Field:时间字段。
Date Time Field:日期时间字段,合并了日期字段与时间字段。
File Field:实际上是字符串类型,用来把上传的文件的路径保存在数据库中。
Image Field:实际上是字符串类型,用来把上传的图片的路径保存在数据库中。
name=models.Char Field(max_length=32,verbose_name='姓名')
verbose_name在Django Admin管理后台是字段的显示名称,可理解为字段别名,verbose_name在SQL层面没有具体的体现,也就是说加不加verbose_name对数据库中的字段没影响
email=models.Email Field(verbose_name='邮箱')
descript=models.Text Field(verbose_name="简介")
int= models.Integer Field()
date=models.Date Field(auto_now=True, auto_now_add=False)
auto_now参数自动保存当前时间,一般用来表示最后修改时间。在第一次创建记录的时候, Django将auto_now_add字段值自动设置为当前时间,用来表示记录对象的创建时间。
time= models.Time Field(auto_now=False,auto_now_add=False)
datetime=models.Date Time Field(auto_now=False,auto_now_add=False)
filetest =models.Fiel Field (upload_to = 'test/')
picture = models.Image Field(upload_to = 'pic/')
常用字段属性
db_index:db_index=True表示设置此字段为数据库表的索引。
title = models.Char Field(max_length=32, db_index=True)
unique:unique=True表示该字段在数据库表中不能有重复值。
default:设置字段默认值,如default=‘good’。
auto_now_add:Datetime Field、Date Field、Time Field 这3 种字段的独用属性, auto_now_add=True表示把新建该记录的时间保存为该字段的值。
auto_now:Datetime Field、Date Field、Time Field这3种字段的独用属性,auto_now= True表示每次修改记录时,把当前时间存储到该字段。
ORM基本数据操作
增加记录
方式一:
new_emp= models.employee.objects.create(name="tom",email="tom@163.com",dep_id=66)
方式二:
new_emp= models.employee (name="tom",email="tom@163.com",dep_id=66)
new_emp.save()
删除记录
用filter()过滤出符合条件的记录后调用delete()删除
models. employee.objects.filter(name= "张三").delete()
修改记录
将指定条件的记录更新,并更新指定字段的值
models.employee.objects.filter(name='tom').update(email="tom2@163.com")
修改单条数据
obj = models.employee.objects.get(id=66)
obj.email = "tom2@sina.com"
obj.save()
查询
获取全部
Emp_list= models.employee.objects.all()
获取单条数据,数据不存在则报错
Emp=models.employee.objects.get(id=123)
获取指定条件的记录集
Emp_group=models. employee.objects.filter(name= "张三")
Django ORM数据操作常用函数
all()函数,返回符合条件的全部记录。
objects = models.employee.objects.all()
filter()函数,返回指定条件的记录。filter后面的括号内为过滤条件,类似于SQL中语句where后面的条件语句。
objects = models.employee.objects.filter(name='tom')
# 获取name字段包含“Tom”的记录
models. employee.objects.filter(name__contains="Tom")
# 获取name字段包含“tom”的记录,icontains忽略大小写models.employee.objects.filter(name__icontains="tom")
# 获取employee数据表中id等于10、20、66的数据
models. employee.objects.filter(id__in=[10, 20, 66])
# 获取employee数据表中id不等于10、20、66的记录,因为前面用的是exclude
models. employee.objects.exclude(id__in=[10, 20, 66])。
# 获取employee数据表中id大于1 且 小于10的记录,两个过滤条件的关系等价于SQL的and
models. employee.objects.filter(id__gt=1, id__lt=10)
# 获取employee数据表中id在范围1~66内的记录,等价于SQL的id bettwen 1and 66
models. employee.objects.filter(id__range=[1, 66])
# 获取employee数据表中birthday字段中月份为9月的记录,birthday为日期格式
models. employee.objects.filter(birthday__month=9)
order_by()函数,按照order_by后面括号中的字段排序。
objects =models.employee.objects.exclude(name='tom').order_by('name','id')
# 字段名中加“-”,表示按该字段倒序排列。如下代码表示,按name字段倒序排列列表。
objects = models.employee.objects.order_by('-name')
distinct()函数,去掉记录集合中完全一样的记录(重复记录),然后返回这个记录集。
objects = models.employee.objects.filter (name='tom').distinct()
其他函数
values()函数,返回一个字典类型序列。
objects = models.employee.objects.values('id','name','email')
values_list()函数,返回一个元组类型序列。
objects = models.employee.objects.values_list('id','name','email')
get()、first()、last()返回单个对象,可以理解为返回数据表中的一条记录。
# 返回id为1的记录,括号内是过滤条件
object1 = models.employee.objects.get(id=1)
# 返回数据集的第一条记录
object2 = models.employee.objects.first()
# 返回数据集的最后一条记录
object3 = models.employee.objects.last()
# 返回数据集的个数
bject4= models.employee.objects.count()