八月22日,django知识点总结:
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | 八月 22 日,知识点总结: python manage.py makemigrations python manage.py migrate一、增删改查 1 、添加表内容(三种方式) 1.1 obj = models.UserType(列名 = ‘内容’) obj.save() 1.2 models.UserType.objects.create(列名 = ‘内容’) 1.3user_dict = { '列名' :‘内容’, '列名' ,'内容’} models.UserType.objects.create( * * user_dict) 2 、查询数据 2.1 request.POST.get( 'usernaem' ) #获取单条数据,不存在则报错(不建议) 2.2 ret = models.UserType.objects. all () #获取全部 print ( type (ret),ret.query) for item in ret: #根据循环可以输出表内容 print (item,item.nid,item.caption) #ret.query 返回一个原生SQL #ret,得到一个特殊的QuerySet对象 2.3 ret = models.UserType.objects. all ().values( 'nid' ) print (ret) #values('xxx') #返回一个列表中包含字典 2.4 ret = models.UserType.objects. all ().values_list( 'nid' ) print ( 'ret' ) #返回一个列表中加元组 2.5 model.UserType.objects. filter (name = 'name' ) # 获取指定条件的数据 3 、更改数据库内容 3.1 models.UserInfo.objects. filter (user = 'alex' ).update(email = '123@qq.com' ) #将指定的条件更新到数据库,可以使用字典**kwargs 3.2 obj = models.UserInfo.objects.get(user = 'alex' ) obj = email = '!!!!@!!!!!' obj.save() #修改单条数据 4 、删除数据 4.1models .UserInfo.objects. filter (name = 'alex' ).delete() 按条件删除 二、双下划线操作 1. 连表操作 1.1 ret = models.UserInfo.objects. all ().values( 'user' , 'user_type__caption' ) ##user_type__caption __双下划线在这是执行连表操作,输出另外表内容 1.2 拿出类型是超级管理员的所有用户 ret = models.UserInfo.objects. filter (user_type__caption = "管理员" ).values( 'user' , 'user_type__caption' ) 2. 多对多(ManyToMany) 注:创建多台主机,多个部门 1. 自动创建关系表 1.1 h2g = models.ManyToManyField( 'host' ) #创建多对多关系 1.1 . 1 将多台机器分配给一个组 add添加关系,remove 删除表关系,delete删除表关系和表 set 添加,删除 h = Host.objects.get(hid = 1 ) ##只删除表关系 h.group_set.remove( * Group.objects. filter (gid__gt = 1 )) h = Host.objects.get(hid = 1 ) ##添加表关系 h.group_set.add( * Group.objects. filter (gid__gt = 1 )) h = Host.objects.get(hid = 1 ) h.group_set. all ().delete() #delete删除表关系和表 obj = Group.objects.get(gid = 1 ) print (obj.gid,obj.name,obj.h2g. all ()) #bj.h2g.all() 是关系表,没创建关系输出空列表 q = models.objects. filter (hid__gt = 3 ) obj.h2g.add( * q) #将多台主机分到obj组 2.2 . 2 将一台主机分给多个组 h = Host.objects.get(hid = 1 ) obj = Group.objects.get(gid = 1 ) obj.h2g.add(h) ##主机id等于1分配到第一组 obj = Group.objects.get(gid = 2 ) ## obj.h2g.add(h) ###主机id等于1分配到第二组 h = models.Host.objects.get(hid = 1 ) ##找到第一台主机 h.group_set.add( * Group.objects. filter (gid__gt = 2 )) #gid大于2的所有分组分配给H主机 反向查找 表名__set ,查找什么表名就是什么 h.models.Host.objects.get(hid = 1 ) h.group_set.add( * models.Group.objects. filter (gid__gt = 12 )) 注: h = Host.objects.get(hid = 1 ) h.group_set.add( 1 ) ##可以直接写数字添加 h.group_set.add(Group.objects.get(gid = 1 )) h.group_set.add( * [ 1 , 2 , 3 ]) ##可以用列表添加关系 h.group_set. set (Group.objects. filter (gid__gt = 18 ), clear = True ) clear = True 清空在设置(添加) set 不清空添加 注:附加 update_or_create,get_or_create 这两个是一样的 都是给group和关系表添加数据 前提是关系表里不存在这个数据 列: # r = h.group_set.update_or_create(name='技术部') 如果没有技术部,就给group组中加上技术部,关系表中自动关联一条数据 # print(r) # r = h.group_set.get_or_create(name='人事部') # print(r) 2. 自己创建表关系 HostToGroup.objects.create(Host_id_id = 1 ,group_id_id = 2 ,status = 11 ) #添加内容 创建索引 class HostToGroup(models.Model): # hgid = models.AutoField(primary_key=True) # host_id = models.ForeignKey('Host') # group_id = models.ForeignKey('Group') # status = models.IntegerField() # class Meta: # unique_together = [ ###定义唯一索引,里面的索引值就不可以重复 # ('host_id', 'group_id'), # ] |
unique=true是指这个字段的值在这张表里不能重复,所有记录值都要唯一,就像主键那样搜索nullable=false是这个字 段在保存时必需有值,不能还是null值就调用save去保存入库
实例
# 1、查询所有图书类型为“科学”的所有书籍的 名称、价格、发布时间、图书类型(两种方式)
# 2、查询作者“alex"参与编写的所有书籍(两种方式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Author(models.Model): ''' 作者 ''' name = models.CharField(max_length = 100 ) age = models.IntegerField() class BookType(models.Model): ''' 图书类型 ''' caption = models.CharField(max_length = 64 ) class Book(models.Model): ''' 图书 ''' name = models.CharField(max_length = 64 ) pages = models.IntegerField() price = models.DecimalField(max_digits = 10 , decimal_places = 2 ) # 数字长度max_digits,有效位数decimal_places pubdate = models.DateField() ##出版事件 authors = models.ManyToManyField(Author) book_type = models.ForeignKey(BookType) |
表中添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # models.Author.objects.create(name='alex',age=12) # models.Author.objects.create(name='sunqihu',age=15) # models.Author.objects.create(name='jay',age=16) # # models.BookType.objects.create(caption='文学') # models.BookType.objects.create(caption='科学') # models.BookType.objects.create(caption='数学') # # book_mode={"name":"一路向西", # "pages":300, # "price":50, # "pubdate":"2011-09-09", # "book_type_id":2 # # } # models.Book.objects.create(**book_mode) |
添加关系
1 2 3 4 5 6 7 | # h =models.Book.objects.get(id=1) # h.authors_set.add(models.Author.objects.filter(id=2)) # h =models.Book.objects.all().get(id=1) # obj =models.Author.objects.all().filter(id=3) # print(type(obj)) # # print(h,type(h)) # obj.book_set.add(h) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 第一种方法 # rat = models.Book.objects.filter(book_type__caption='科学').values( # 'name','price','pubdate','book_type__caption' # ) # print(rat) # for i in rat: # print(i) # rem =models.Book.objects.filter(authors__name='sunqihu').values('name','authors__name') # print(rem) #第二种方法 # objs =models.BookType.objects.get(caption="科学") # obj =objs.book_set.values('name','price','pubdate','book_type__caption') # print(obj) # obj = models.Author.objects.get(name='sunqihu') # obs =obj.book_set.values('name','authors__name') # print(obs) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 使用TypeScript开发微信小程序(云开发)-入门篇
· 没几个人需要了解的JDK知识,我却花了3天时间研究
· 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· .NET Core中的配置Configuration实战