主篇:Django之Model操作之单表及跨表(双下划线)的3种不同方式获取数据【ORM篇七】点击跳转
目录
建立表类
跳转:实战之Django之Model建表流程 https://blog.csdn.net/Burgess_zheng/article/details/86564984
路径:project/modes_handle/models.py
from django.db import models class Business(models.Model): #默认:自动创建id自增列(主键) caption = models.CharField(max_length=32) code = models.CharField(max_length=32,null=True,default="SA") #django可以修改表结构: #后期新增加一个字段 #那么该字段需要使用参数null=True(允许空) or default= '默认值' #如果该字段没有使用上面两个参数, 那么执行生成表的时候会提示让你输入默认值 #主机表 class Host(models.Model): nid = models.AutoField(primary_key=True) #自定义自增列(主键),如不写自动创建 hostname = models.CharField(max_length=32,db_index=True) #db_index=True 普通索引(因为主机名经常被查询) ip = models.GenericIPAddressField(protocol="both",db_index=True ) #IPAddressField 只支持IPV4(现在使用报错,被移除掉了) #GenericIPAddressField(protocol="both" ) 支持IPV4,和IPV6 # 默认:GenericIPAddressField(protocol="ipv4" ) 支持IPV4 port = models.IntegerField() #数字类型不用加字符长度,否则报错 b = models.ForeignKey(to="Business",to_field='id',on_delete=models.CASCADE) #外键关联Business表(属于该表的哪个业务线),关联Business表主键id
进入项目目录下执行以下面命令(创建表 or 重新生成表结构)
python manage.py makemigrations
python manage.py migrate
表数据(django自带的sqlite可视化进行添加,当然也可以进行命令添加)
Business表
Host表
根据类表进行django的shell命令行操作
进入项目目录(执行如下命令进行django提供的shell命令行)
F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py shell
单表
对象形式获取方式:其实就类似[{字段名:字段值,字段名:字段值,...},{}]
>>> from modes_handle import models >>> queryset = models.Business.objects.all() >>> queryset1 = models.Business.objects.filter(id=1) >>> queryset2 = models.Business.objects.filter(id=2).first() >>> queryset <QuerySet [<Business: Business object (1)>, <Business: Business object (2)>, <Business: Business object (3)>, <Business: Business objec t (4)>]> >>> queryset1 <QuerySet [<Business: Business object (1)>]> >>> queryset2 <Business: Business object (2)>
values字典形式获取方式:其实就类似[{字段名:字段值,字段名:字段值,...},{}]但是只取values里面设置的字段名和字段值
>>> from modes_handle import models >>> dict = models.Business.objects.all().values('id','caption') >>> dict <QuerySet [{'caption': '运维部', 'id': 1}, {'caption': '开发部', 'id': 2}, {'caption': '市场部', 'id': 3}, {'caption': '测试', 'id': 4} ]>
values_list元组形式获取方式:其实就类似[(字段值,字段值...),(字段值,字段值...)]
>>> from modes_handle import models >>> tuple = models.Business.objects.all().values_list('id','caption') >>> tuple <QuerySet [(1, '运维部'), (2, '开发部'), (3, '市场部'), (4, '测试')]>
跨表
对象形式获取方式:其实就类似[{字段名:字段值,字段名:字段值,...},{}]
>>> from modes_handle import models >>> from modes_handle import models >>> queryset = models.Host.objects.all() >>> for row in queryset: ... print('host表:',row.nid,row.hostname,row.ip,row.port,row.b_id,sep='\t') ... print('关联对象',row.b) ... print('关联对象内容:',row.b.id,row.b.caption,row.b.code,sep='\t') ... print('-------------------下一条-----------------') ... host表: 1 c1.com 1.1.1.1 9900 1 关联对象 Business object (1) 关联对象内容: 1 运维部 SA -------------------下一条----------------- host表: 2 c2.com 1.1.1.2 80 1 关联对象 Business object (1) 关联对象内容: 1 运维部 SA -------------------下一条----------------- host表: 3 c3 1.1.1.3 90 2 关联对象 Business object (2) 关联对象内容: 2 开发部 SA -------------------下一条----------------- >>>
values字典形式获取方式:其实就类似[{字段名:字段值,字段名:字段值,...},{}]但是只取values里面设置的字段名和字段值
>>> from modes_handle import models >>> dict = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption') >>> dict <QuerySet [{'hostname': 'c1.com', 'b_id': 1, 'b__caption': '运维部', 'nid': 1}, {'hostname': 'c2.com', 'b_id': 1, 'b__caption': '运维部 ', 'nid': 2}, {'hostname': 'c3', 'b_id': 2, 'b__caption': '开发部', 'nid': 3}]>
values_list元组形式获取方式:其实就类似[(字段值,字段值...),(字段值,字段值...)]
>>> from modes_handle import models >>> tuple = models.Host.objects.filter(nid__gt=0).values_list('nid','hostname','b_id','b__caption','b__code') >>> tuple <QuerySet [(1, 'c1.com', 1, '运维部', 'SA'), (2, 'c2.com', 1, '运维部', 'SA'), (3, 'c3', 2, '开发部', 'SA')]>
这里双下划线的两种解释:__gt:增加一个判断条件大于 b__caption:取外键关联的指定字段值
主篇:Django之Model操作之单表及跨表(双下划线)的3种不同方式获取数据【ORM篇七】点击跳转