一、创建数据
1、mymodel.objects.create(属性1=值1,属性2=值2),成功返回实体对象,错误抛出异常
2、obj = mymodel(属性1=值1,属性2=值2)
obj.save()
二、查询数据
1、mymodel.objects.all()--select * from table,返回queryset容器对象,内部存放mymodel实例
2、mymodel.objects.values('字段名1',''字段名2'),返回对应字段的字典值
3、mymodel.objects.values_list('字段名1',''字段名2'),list放的是元组,返回对应字段的元组
4、mymodel.objects.order_by('字段名'),升序查询; mymodel.objects.order_by('-字段名'),降序查询,返回object对象
5、mymodel.objects.filter(属性1=值1,属性2=值2)
mymodel.objects.filter(字段__exact=1)exact:等值匹配
mymodel.objects.filter(字段__contains='w'),等同于sql的like '%w%'语句
mymodel.objects.filter(字段__startswith='w'),等同于sql的like 'w%'语句
mymodel.objects.filter(字段__endswith='w'),等同于sql的like '%w'语句
mymodel.objects.filter(字段__gte=10),查询字段大于10
mymodel.objects.filter(字段__lt=10),查询字段小于10
mymodel.objects.filter(字段__lte=10),查询字段小于或等于10
mymodel.objects.filter(字段__in=[1,2,3]),查询字段是否在1,2,3里面
mymodel.objects.filter(字段__range=(1,100)),查询字段是否在1到100范围
6、mymodel.objects.exclude(属性1=值1,属性2=值2),查询不包含此条件的
7、mymodel.objects.get(属性1=值1,属性2=值2),查询满足条件唯一一条数据,查询结果大于1或者无数据则抛出异常
三、修改数据
1、单条数据修改(查--改--存)
① 通过get()获得唯一数据值对象; ② 对象.字段 = 新的值; ③ 对象.save( )
2、多条数据修改
① 通过查询语句查出数据;② 对象.update(字段 = 新的值)
四、删除数据
1、单个数据删除(查-删)
① 通过get()获得数据;② 对象.delete();
2、批量删除数据(查-删)
① 通过filter获得数据;② 对象.delete();
五、F对象和Q对象
F对象:类似并发的锁机制,能够生成+=的sql语句,F('字段名')表示暂时不查找该字段名的值;
Q对象:获取查询结果集,逻辑或“|”,逻辑非“~”,逻辑与“&”等操作
model.objects.filter(Q(条件1)|Q(条件2)) # 查找条件1或条件2成立的数据
六、聚合查询
1、整表聚合 -- 聚合函数: Sum, Avg, Count, Max, Min, 返回字典结果
① 导入 from django.db.models import *
② mymodel.objects.aggregate(结果变量名 = 聚合函数('列'))
2、分组聚合 -- QuerySet.annotate(结果变量名 = 聚合函数('列')),QuerySet表示查询后的集合
七、原生数据库操作
1、mymodel.objects.raw(sql语句, 拼接参数),返回集合对象
例:Book.objects.raw('select * from table where id = %s', ['1']),能够防止sql注入
2、
from django.db import connection
with connetion.cursor() as cur:
cur.execute(sql语句,['拼接参数'])