Django-ORM详解-字段、属性、操作

常用字段类型

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()