6 Django系列之关于models的sql语句日常用法总结
preface
Django提供了强大的ORM,我们可以通过ORM快速的写出我们想要对数据做什么样操作的代码。下面就说说我在日常工作中的用法:
外键关联精确查询
应用场景:表A host字段关联到了表B,在进行查询host的时候,那么就需要来查询表B里面的字段,那么就看看代码。
在models.py文件里,表一结构如下:
class DockerContainers(models.Model):'''用来记录docker容器信息的'''Real_host_ip = models.ForeignKey(DockerOfHost,verbose_name='Docker宿主机IP') # 外键关联到了另一张表Container_id = models.CharField(u'容器ID',max_length=400,primary_key=True,unique=True)Container_name = models.CharField(u'容器名字',max_length=300,null=True,blank=True)Container_image = models.CharField(u'容器镜像',max_length=300)Container_Image_id = models.CharField(u'镜像ID',max_length=500,null=True,blank=True)Command = models.CharField(u'运行的命令',max_length=300,null=True,blank=True)Created = models.CharField(u'创建时间',max_length=200)Status = models.CharField(u'运行状态',max_length=100,null=True,blank=True)Port = models.CharField(u'容器端口',max_length=1000,null=True,blank=True)SizeRw = models.IntegerField(null=True,blank=True)SizeRootFs = models.IntegerField(null=True,blank=True)Host_config = models.CharField(u'主机配置',max_length=1024,null=True,blank=True)Network_settings = models.CharField(u'网络配置',max_length=3000,null=True,blank=True)Mounts = models.CharField(u'挂载目录',max_length=1024,null=True,blank=True)Record_time = models.DateTimeField(u'数据更新时间',auto_now=True)def __str__(self):return "%s:%s"%(self.Real_host_ip,self.Container_id)class Meta:verbose_name = "Docker容器信息"verbose_name_plural = "Docker容器信息"
在models.py文件里,表二结构如下:
class DockerOfHost(models.Model):host_ip = models.CharField(u'Docker宿主机IP',max_length=250,unique=True)def __str__(self):return self.host_ipclass Meta:verbose_name = "Docker宿主机IP"verbose_name_plural = "Docker宿主机IP"
在views.py里的代码:
models.DockerContainers.objects.filter(Real_host_ip__host_ip__exact=k) # k是一个变量
解释下:Real_host_ip表示是DockerContainers表(你现在要查询的表)的外键关联字段,Real_host_ip与host_ip之间用了两个下划线( __ )表示是从Real_host_ip字段的外键关联的表(DockerOfHost)查询host_ip字段,两个下划线( __ )是Django保留字段,含有特殊意义,在这里代表查询某一个外建表的某一个字段。exact是精确匹配上。
复杂条件查询之 同表不同字段的或关系查询
应用场景: 前端提交一个请求,需要在一张表里搜索一个容器的ID或者容器的name,此时就需要使用或关系了,匹配到了容器ID或者容器name那么就返回一个值。
对于上面的场景,django同样支持复杂查询通过使用Q。下面看看代码
views.py的代码如下:
from django.db.models import Q
infos = models.DockerContainers.objects.filter(Q(Container_name__contains=ci)|Q(Container_id__startswith=ci))
解释下:Container_name是DockerContainers表的一个字段,__contains表示是包含指定的内容,注意是2个下划线。中间用了一个管道符|表示或关系,__startswith表示匹配指定内容的开头,也是2个下划线。这里就是使用了Q来做或关系,每个Q里面包含一个搜索条件。上面那段代码等同于这个SQL语句:
select * from DockerContainers WHERE Container_name LIKE '%ci%' OR Container_id LIKE 'ci%'
更多的Q使用方法,可以参考官网:https://docs.djangoproject.com/en/1.10/topics/db/queries/#complex-lookups-with-q (到这个页面搜索import Q即可找到)
6 Django系列之关于models的sql语句日常用法总结相关推荐
- mysql查询第10到第20条记录_“取出数据表中第10条到第20条记录”的sql语句+selecttop用法...
1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...
- SQL 语句的用法用途
###**SQL 语句关键字 [排序] **### ####**1.以SQL语句的书写顺序排序下列SQL语句关键字limit.left.join.order by.group by.where.sel ...
- MyBatis-动态sql语句-if用法——MySQL系列学习笔记
select 根据传入的参数来决定:如果用户名不为空,则对用户名进行模糊查询,如果邮箱不为空,则以邮箱为查询条件 <select id="selectByUser" para ...
- sql 语句as用法
as可以理解为用作,当做,一般用作重命名列名或表名. 例:select column_1 as 列1,column_2 as 列2 from table 上面的语句可以理解为选择column_1作为列 ...
- sqlite3的sql语句用法总结与SQLite生成.db-journal文件问题【原创】
Author:张继飞 这几天遇到了一个问题就是在insert以及update数据的时候,总是生成一个.db-journal文件,重新启动程序后,该文件消失,前面添加修改的数据没有成功保存.关于如何解决 ...
- mysqls为node.js而编写的sql语句生成插件 crud for mysql.
mysqls It is written in JavaScript,crud for mysql.You can also use transactions very easily. mysqls ...
- python命令行调试django代码_Django shell调试models输出的SQL语句方法
在settings.py里,配置如下logging: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': ...
- django 使用原生SQL语句反向生成MODELS.PY中的表结构
在一次工作中,有这么一个问题,就是要导入的数据字段不确定,但是还想使用django的ORM来对数据进行操作.. 琢磨了许久,弄个不完善的方案,但功能是能实现的,主要是思路.废话不多说了,丑陋的展示一下 ...
- django 默认查询条件_Python之Django系列-创建第一个应用-4
上一篇:Python之Django系列-创建第一个应用-3 上一篇文章我们介绍了创建项目,打开浏览器访问http://127.0.0.1:8000/polls/,能看见"投票主页视图&quo ...
最新文章
- 【ACM】杭电OJ 2020(排序)
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- java fx 插件,JAVA FX 應用程序基礎
- select ...as_一起使用.select .map和.reduce方法可充分利用Ruby
- matlab的示波器保存figure图像
- [USACO09OCT]热浪Heat Wave
- 【写作技巧】计算机应用技术毕业论文范文
- git修改本地仓库和远程仓库名称
- C++ 模板和 C# 泛型之间的区别(C# 编程指南)
- vector容器v1、v2之间相互赋值的三种方法及易错点详解
- 什么叫运营---一个人,一张网,一艘船,独钓寒江雪!
- VB.net,VB2005实现TCP协议编程
- 桌面计算机图标变黑块,电脑中的文件夹图标变成黑色的方块的四种解决方法
- Java版俄罗斯方块
- 红米Redmi K40手机刷入Magisk获取Root教程
- 2022年版中国腰果酚市场趋势研究与竞争策略分析报告
- EOS Wallet 操作
- FTP连接时出现“227 Entering Passive Mode” 的解决方法
- mac创建文件服务器,mac命令行终端怎么创建文件 mac命令行终端创建文
- 核电站计算机专业是干什么的,什么叫核电站?它是干什么用的呢?
热门文章
- html中select标签乱码,select 的过程中中文乱码有关问题求教
- 计算机英语口试,英语口试面对“电脑考官”有哪些临场应试技巧
- finally 嵌套_学习 Rust【2】减少代码嵌套
- linux eth0 目录,教程 | Linux常用命令大全
- oracle count over partition by,over (Partition by...) of oracle
- calendar.getinstance()获取的是什么时间_时间管理技能培训.ppt
- xml文件修改逆向android,Android逆向重置版(2)—起源
- PHP代码审计弱类型,[代码审计]php弱类型总结
- 获取页面中超链接数量_微信订阅号自定义菜单添加页面模板使用教程。
- action链接html,如何使用@ html.actionlink删除链接文本