from django.contrib.auth.models import User
from django.db.models import Q
from django.db.models.functions import Lower
from app.models import *
添加操作a、使用create方式
1 2 3 4 5 6 7 8 9 10 11 | 方式一: Publish.objects.create( "name" = "人民出版社" ,city = "北京" } 方式二: Publish.objects.create( * * { "name" : "文艺出版社" , "city" : "上海" }) b、使用save方式 方式一: book1 = Book(title = "python" ,price = "88" ,publish_id = "1" ,publication_date = "2017-06-18" ) book1.save() 方式二: author1 = Author(name = "jerry" ) author1.save()user = User() user.username = '大侠' user.password = '就是不告诉你密码user.save() #批量插入Book.objects.bulk_create([])#注:get_or_create,有就查询出来,没有就创建 |
查找操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #按照age降序排序,然后再按照name升序排序,'age'表示升序; '-age'表示降序。升序时可以不写,是默认 Student.objects. filter (school = "阳关小学" ).order_by( '-age' , 'name' ) #随机排序 Student.objects.order_by( '?' ) #按username升序排列 User.objects.order_by( 'username' ) # 反序 User.objects.order_by( 'uid' ).reverse() #从下标为4记录到下标为9的记录 User.objects.order_by( 'uid' )[ 4 : 10 ] #values values_list 指定字段 User.objects. all ().values( 'username' )<br>User.objects. all ().values_list( 'username' ,flat = True ) #去重 distinct User.objects.values( "password" ).distinct()[: 10 ] 【基于双下划线的模糊查询】 __exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含,忽略大小写 ilike '%aaa%' ,但是对于sqlite来说,contains的作用效果等同于icontains。 __startswith 以…开头 __istartswith 以…开头 忽略大小写 __endswith 以…结尾 __iendswith 以…结尾,忽略大小写 __range 在…范围内 __year 日期字段的年份 __month 日期字段的月份 __day 日期字段的日 Book.objects. filter (price__in = [ 100 , 200 , 300 ]) #price值等于这三个里面的任意一个的对象 Book.objects. filter (price__gt = 100 ) #大于,大于等于是price__gte=100,别写price>100,这种参数不支持 Book.objects. filter (price__lt = 100 ) Book.objects. filter (price__range = [ 100 , 200 ]) #sql的between and,大于等于100,小于等于200 Book.objects. filter (title__contains = "python" ) #title值中包含python的 Book.objects. filter (title__icontains = "python" ) #不区分大小写 Book.objects. filter (title__startswith = "py" ) #以什么开头,istartswith 不区分大小写 Book.objects. filter (pub_date__year = 2012 ) Book.objects. filter (name__isnull = True ) / / 查询用户名为空的书 【F查询和Q查询】 from django.db.models import Q,F #Q对象可以对关键字参数进行封装,从而更好的应用多个查询 #F查询专门取对象中某列值的操作,F的作用:用来批量修改数据的 #把table1表中的num列中的每一个值在的基础上加10 table1.objects. all ().update(num = F( "num" ) + 10 ) ##查询table2表中以"aaa"开头的所有的title列 table2.objects. filter (Q(title__startswith = "aaa" )). all () #查找以"aaa"开头,或者以"bbb"结尾的所有title Q(title__startswith = "aaa" ) | Q(title__endswith = "bbb" ) #查找以"aaa"开头,且不以"bbb"结尾的所有title Q(title__startswith = "aaa" ) & ~Q(title__endswith = "bbb" ) #查找以"aaa"开头,以"bbb"结尾的title且书的id号大于4的记录 Q(title__startswith = "aaa" ) | Q(title__endswith = "bbb" ),book_id__gt = 4 【聚合查询】 from django.db.models import Avg, Sum , Max , Min , Count #计算图书价格的平均值 Book.objects. all ().aggregate(avg_price = Avg( 'price' )) #计算图书价格的总和 Book.objects. all ().aggregate(total_price = Sum ( 'price' )) #找到图书价格的最大值 Book.objects. all ().aggregate(max_price = Max ( 'price' )) #按照图书标题的首字母进行分组,并计算每个组内图书价格的平均值 Book.objects.values( 'title__startswith' ).annotate(avg_price = Avg( 'price' )) |
更新操作
1 2 3 4 5 6 7 8 9 10 | #使用save方法将所有属性重新设定一遍,效率低 author1 = Author.objects.get( id = 3 ) #获取id为3的作者对象 author1.name = "jobs" #修改作者对象的名字 author1.save() #把更改写入数据库 #使用update方法直接设置对就的属性 Publish.objects. filter ( id = 2 ).update(name = "北京出版社" ) 注意:update()是QuerySet对象的一个方法,get返回的是一个model对象,其没有update方法. filter 返回的是一个QuerySet对象, filter 里可以设定多个过滤条件<br><br>data = { 'username' : 'nick' , 'is_active' : '0' } User.objects. filter ( id = 1 ).update( * * data)<br><br>注:<strong>update_or_create< / strong>:有就更新,没有就创建 |
删除操作
1 | Book.objects. filter ( id = 1 ).delete() |
分类:
python / django
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统