版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Burgess_zheng/article/details/86567519
上一篇 Django之Model操作建表流程【ORM篇二】https://blog.csdn.net/Burgess_zheng/article/details/86564701
目录
已创建好的django表类
实战Django之Model常用操作之单表增删改查 https://blog.csdn.net/Burgess_zheng/article/details/86580306
路径:project/app/models.py
from django.db import models #UserGroup(组表) class UserGroup(models.Model): uid = models.AutoField(primary_key=True) #创建一个自增的列(主键)如果不写:默认是也有自增列,该列的字段名:id caption = models.CharField(max_length=32) ctime = models.DateTimeField(auto_now_add=True,null=True) #auto_now_add=True 创建数据的时候,该列不用加,自动生成当前时间 uptime = models.DateTimeField(auto_now=True, null=True) #auto_now 更新数据的时候该列自动生成更改的当前时间 #但是下面这种更改数据,auto_now该列还是不会生效 #UserInfo(用户表) class UserInfo(models.Model): #默认字段字段ID 且是主键 username =models.CharField(max_length=32,blank=True,verbose_name='用户名') # 用户名列,字符串类型,指定长度32字符 #(如果是数字类型models.IntergerFiled无需指定长度,否则报错) password = models.CharField(max_length=60,editable=False) # 密码名列,字符串类型,指定长度64字符 email = models.CharField(max_length=60,help_text='邮箱') test = models.EmailField(max_length=19,null=True) #只支持邮箱格式(django的admin有效) #test = models.URLField(max_length=19, null=True) #只支持URL格式(django的admin有效) #test = models.GenericIPAddressField(max_length=19, null=True) #只支持IPV4和IPV6格式 #gender = models.CharField(max_length=60,null=True) user_type_choices = (#变量=元组嵌套元组,是存放在内存里面的 (1,'超级用户'), (2,'普通用户'), (3,'普普通通用户'), ) user_type_id = models.IntegerField(choices=user_type_choices,default=1) #该字段引用了上面的嵌套元组 IntegerField:数字类型,默认值都是1超级用户 user_group = models.ForeignKey("UserGroup",to_field='uid',default=1,on_delete=models.CASCADE) #该字段UserGroup表的主键uid进行关联 to_field='uid'不写默认就是关联UserGroup表的主键 #只要是外键的字段,我们数据库生产表的时候,字段名字会自动变 user_group_id #user_group_id 该字段作用:查询UserInfo表的该字段的值 #user_group 该字段作用:UserInfo表每行数据外键所关联UserGroup的主)的数据可被查询
根据表对象进行增删改查常用操作
project/app/views.py
from modes_handle import models # 要对数据库表操作,所以需要导入该表类进行操作 def orm(request): # 增(三种操作方式) # 第一种args方式增加数据 models.UserGroup.objects.create(caption='IT') # 第二种save方式增加数据 obj = models.UserGroup(caption='EC') obj.save() # 第三种字典方式增加数据(不管增删改查指定条件也就是使用关键传参,自然就可以使用字典传参方式,) dict = {'caption':'NC'} models.UserGroup.object.create(**dict) # 改 #第一种args方式修改数据 #修改所有的字段 models.UserGroup.objects.update(caption='BURGESS') #修改匹配数据 models.UserGroup.objects.filter(uid=1).update(caption='ONE') models.UserGroup.objects.filter(uid__gt=1).update(caption='THREE') # __gt=:大于1 # __gte=:大于等于1 # __lt=1 小于1 # __lte=1 小于等于1 models.UserInfo.objects.filter(uid__gt=1, caption='TWO').update(caption='XX') # 逗号隔开 and的关系, id>1 并且 caption='TWO' 同时成立才匹配 #第二种save方式修改数据 obj = models.UserGroup.objects.get(uid=1) obj.caption = 'ONEAGAIN' obj.save # 第三种字典方式增加数据(不管增删改查指定条件也就是使用关键传参,自然就可以使用字典传参方式,) dic_if = {'uid__gt': 1} dic_p = {'caption': 'XX'} models.UserGroup.objects.filter(**dic_if).update(**dic_p) # 查 models.UserGroup.objects.get(uid=123) # 获取单条数据,不存在则报错(不建议) models.UserGroup.objects.all() # 获取全部 models.UserGroup.objects.filter(caption='burgess') # 获取指定条件的数据 models.UserGroup.objects.exclude(caption='burgess') # 获取指定条件的数据 # 获取指定数据 filter==where(sqly原生语句) result = models.UserGroup.objects.filter(caption='root') print(result) # 注意:result获取的是QuerySet类型的也就是[列表类型],哪怕指定条件获取为1条数据 # 如:打印显示 < QuerySet[ < UserGroup:UserGroup object >] > # 所以进行需要进行for循环取对象,通过下标也可以 for row in result: print(obj.uid,obj.caption,obj.ctime,obj.uptime) result = models.UserGroup.objects.all() #result= all该表所有的数据 for row in result: print(obj.uid,obj.caption,obj.ctime,obj.uptime) # 删 # 删除所有的(就不执行了) models.UserGroup.objects.all().delete() # 删除匹配的条件条件(filter匹配条件内可以使用字典方式,) models.UserGroup.objects.filter(uid=4).delete() models.UserGroup.objects.filter(caption="burgess").delete()
当然还有其他的参数如id_in,exclude,distinct 等等...后面会有一个参数汇总篇出来这里先点到为止
汇总篇跳转:
上一篇 Django之Model操作建表流程【ORM篇二】https://blog.csdn.net/Burgess_zheng/article/details/86564701