前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询

Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询

作者头像
Devops海洋的渔夫
发布于 2019-06-15 08:26:57
发布于 2019-06-15 08:26:57
1.9K00
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

上一篇Django 2.1.7 模型 - 条件查询、模糊查询、空查询、比较查询、范围查询、日期查询讲述了关于Django模型的查询。

但是都是条件与常量的查询,以及单条件查询,那么本篇章来介绍F对象、Q对象、聚合查询等功能。

参考文献

https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/

F对象

之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?

先来看看已有的mysql数据,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from assetinfo_middlewareinfo;
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
| id | name      | port  | server_id | is_delete | shelves_date               | update_time                |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
|  1 | memcached | 11211 |         1 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:37:51.365155 |
|  2 | redis     |  6379 |         1 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:38:20.712862 |
|  3 | nginx     |    80 |         2 |         1 | 2019-06-10 16:41:52.129517 | 2019-06-10 17:38:18.923155 |
|  4 | kafka     |  9092 |         2 |         1 | 2019-06-10 16:42:25.561732 | 2019-06-10 17:39:29.302349 |
|  5 | test      |   123 |         1 |         1 | 2019-06-10 17:05:16.632773 | 2019-06-10 17:05:16.632773 |
|  6 | test      |   123 |         1 |         1 | 2019-06-10 17:06:20.120658 | 2019-06-10 17:06:20.121656 |
|  7 | test      |   123 |         1 |         1 | 2019-06-10 17:06:43.193412 | 2019-06-10 17:06:43.193412 |
|  8 | test      |   123 |         1 |         1 | 2019-06-10 17:07:03.747395 | 2019-06-10 17:07:03.747395 |
|  9 | test      |   123 |         1 |         1 | 2019-06-10 17:08:43.372097 | 2019-06-10 17:08:43.372097 |
| 10 | test      |   123 |         1 |         1 | 2019-06-10 17:09:37.877019 | 2019-06-10 17:09:37.877019 |
| 11 | test      |   123 |         1 |         1 | 2019-06-10 17:11:45.403627 | 2019-06-10 17:11:45.403627 |
| 12 | mysql     |  3306 |         2 |         0 | 2019-06-10 17:12:12.558217 | 2019-06-10 17:12:12.558217 |
| 13 | mongodb   |  3388 |         2 |         1 | 2019-06-10 17:15:18.327729 | 2019-06-10 17:15:18.327729 |
| 14 | mongodb   |  3306 |         1 |         1 | 2019-06-11 14:01:24.003175 | 2019-06-11 14:06:14.525648 |
| 15 | test      |   123 |         1 |         0 | 2019-06-11 14:04:10.576241 | 2019-06-11 14:04:10.576241 |
| 16 | test      |  3306 |         1 |         0 | 2019-06-11 14:06:05.608006 | 2019-06-11 14:06:05.608006 |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
16 rows in set (0.00 sec)

可以看到上面的数据存在 shelves_date 与 update_time 不相等的情况,之前的常量比较SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from assetinfo_middlewareinfo where shelves_date > "2019-06-10 17:38:20.712862" ;
+----+---------+------+-----------+-----------+----------------------------+----------------------------+
| id | name    | port | server_id | is_delete | shelves_date               | update_time                |
+----+---------+------+-----------+-----------+----------------------------+----------------------------+
| 14 | mongodb | 3306 |         1 |         1 | 2019-06-11 14:01:24.003175 | 2019-06-11 14:06:14.525648 |
| 15 | test    |  123 |         1 |         0 | 2019-06-11 14:04:10.576241 | 2019-06-11 14:04:10.576241 |
| 16 | test    | 3306 |         1 |         0 | 2019-06-11 14:06:05.608006 | 2019-06-11 14:06:05.608006 |
+----+---------+------+-----------+-----------+----------------------------+----------------------------+
3 rows in set (0.00 sec)

mysql> 

那么如果需要使用 shelves_date 与 update_time 进行大小比较,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from assetinfo_middlewareinfo where shelves_date < update_time ;
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
| id | name      | port  | server_id | is_delete | shelves_date               | update_time                |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
|  1 | memcached | 11211 |         1 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:37:51.365155 |
|  2 | redis     |  6379 |         1 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:38:20.712862 |
|  3 | nginx     |    80 |         2 |         1 | 2019-06-10 16:41:52.129517 | 2019-06-10 17:38:18.923155 |
|  4 | kafka     |  9092 |         2 |         1 | 2019-06-10 16:42:25.561732 | 2019-06-10 17:39:29.302349 |
|  6 | test      |   123 |         1 |         1 | 2019-06-10 17:06:20.120658 | 2019-06-10 17:06:20.121656 |
| 14 | mongodb   |  3306 |         1 |         1 | 2019-06-11 14:01:24.003175 | 2019-06-11 14:06:14.525648 |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
6 rows in set (0.00 sec)

mysql> 

那么这种SQL按照上一篇的内容是无法实现的,下面来介绍F对象来解决这个问题。

语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
F(属性名)

使用F对象需要导入库,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import F

下面使用模型来查询 shelves_date < update_time 的结果,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [4]: from assetinfo.models import ServerInfo,MiddlewareInfo

In [5]: from django.db.models import F

In [6]: MiddlewareInfo.objects.filter( shelves_date__lt = F('update_time') )
Out[6]: <QuerySet [<MiddlewareInfo: MiddlewareInfo object (1)>, <MiddlewareInfo: MiddlewareInfo object (2)>, <MiddlewareInfo: MiddlewareInfo object (3)>, <MiddlewareInfo: Middlewar
eInfo object (4)>, <MiddlewareInfo: MiddlewareInfo object (6)>, <MiddlewareInfo: MiddlewareInfo object (14)>]>

In [7]: 

对应执行的SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2019-06-12T15:19:37.735397Z    12 Query SELECT `assetinfo_middlewareinfo`.`id`, `assetinfo_middlewareinfo`.`name`, `assetinfo_middlewareinfo`.`port`, `assetinfo_middlewareinfo`.`server_id`, `assetinfo_middlewareinfo`.`shelves_date`, `assetinfo_middlewareinfo`.`update_time`, `assetinfo_middlewareinfo`.`is_delete` FROM `assetinfo_middlewareinfo` WHERE `assetinfo_middlewareinfo`.`shelves_date` < (`assetinfo_middlewareinfo`.`update_time`)  LIMIT 21

可以看到最后的where条件是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`assetinfo_middlewareinfo`.`shelves_date` < (`assetinfo_middlewareinfo`.`update_time`)  LIMIT 21

那么如果对于比较的变量还要乘以2倍,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from assetinfo_middlewareinfo where shelves_date < (update_time*2) ;
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
| id | name      | port  | server_id | is_delete | shelves_date               | update_time                |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
|  1 | memcached | 11211 |         1 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:37:51.365155 |
|  2 | redis     |  6379 |         1 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:38:20.712862 |
|  3 | nginx     |    80 |         2 |         1 | 2019-06-10 16:41:52.129517 | 2019-06-10 17:38:18.923155 |
|  4 | kafka     |  9092 |         2 |         1 | 2019-06-10 16:42:25.561732 | 2019-06-10 17:39:29.302349 |
|  5 | test      |   123 |         1 |         1 | 2019-06-10 17:05:16.632773 | 2019-06-10 17:05:16.632773 |
|  6 | test      |   123 |         1 |         1 | 2019-06-10 17:06:20.120658 | 2019-06-10 17:06:20.121656 |
|  7 | test      |   123 |         1 |         1 | 2019-06-10 17:06:43.193412 | 2019-06-10 17:06:43.193412 |
|  8 | test      |   123 |         1 |         1 | 2019-06-10 17:07:03.747395 | 2019-06-10 17:07:03.747395 |
|  9 | test      |   123 |         1 |         1 | 2019-06-10 17:08:43.372097 | 2019-06-10 17:08:43.372097 |
| 10 | test      |   123 |         1 |         1 | 2019-06-10 17:09:37.877019 | 2019-06-10 17:09:37.877019 |
| 11 | test      |   123 |         1 |         1 | 2019-06-10 17:11:45.403627 | 2019-06-10 17:11:45.403627 |
| 12 | mysql     |  3306 |         2 |         0 | 2019-06-10 17:12:12.558217 | 2019-06-10 17:12:12.558217 |
| 13 | mongodb   |  3388 |         2 |         1 | 2019-06-10 17:15:18.327729 | 2019-06-10 17:15:18.327729 |
| 14 | mongodb   |  3306 |         1 |         1 | 2019-06-11 14:01:24.003175 | 2019-06-11 14:06:14.525648 |
| 15 | test      |   123 |         1 |         0 | 2019-06-11 14:04:10.576241 | 2019-06-11 14:04:10.576241 |
| 16 | test      |  3306 |         1 |         0 | 2019-06-11 14:06:05.608006 | 2019-06-11 14:06:05.608006 |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
16 rows in set (0.00 sec)

使用模型的F对象也是可以直接乘以 2 倍处理的,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [8]: MiddlewareInfo.objects.filter( shelves_date__lt = F('update_time') * 2 )
Out[8]: <QuerySet [<MiddlewareInfo: MiddlewareInfo object (1)>, <MiddlewareInfo: MiddlewareInfo object (2)>, <MiddlewareInfo: MiddlewareInfo object (3)>, <MiddlewareInfo: Middlewar
eInfo object (4)>, <MiddlewareInfo: MiddlewareInfo object (5)>, <MiddlewareInfo: MiddlewareInfo object (6)>, <MiddlewareInfo: MiddlewareInfo object (7)>, <MiddlewareInfo: Middlewar
eInfo object (8)>, <MiddlewareInfo: MiddlewareInfo object (9)>, <MiddlewareInfo: MiddlewareInfo object (10)>, <MiddlewareInfo: MiddlewareInfo object (11)>, <MiddlewareInfo: Middlew
areInfo object (12)>, <MiddlewareInfo: MiddlewareInfo object (13)>, <MiddlewareInfo: MiddlewareInfo object (14)>, <MiddlewareInfo: MiddlewareInfo object (15)>, <MiddlewareInfo: Mid
dlewareInfo object (16)>]>

对应的SQL语句如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2019-06-12T15:26:57.158671Z    12 Query SELECT `assetinfo_middlewareinfo`.`id`, `assetinfo_middlewareinfo`.`name`, `assetinfo_middlewareinfo`.`port`, `assetinfo_middlewareinfo`.`server_id`, `assetinfo_middlewareinfo`.`shelves_date`, `assetinfo_middlewareinfo`.`update_time`, `assetinfo_middlewareinfo`.`is_delete` FROM `assetinfo_middlewareinfo` WHERE `assetinfo_middlewareinfo`.`shelves_date` < ((`assetinfo_middlewareinfo`.`update_time` * 2))  LIMIT 21

可以看到where条件是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`assetinfo_middlewareinfo`.`shelves_date` < ((`assetinfo_middlewareinfo`.`update_time` * 2))  LIMIT 21

Q对象

前面的查询可以看到都是单条件查询,并没有多个条件查询。

例如:执行mysql示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from assetinfo_middlewareinfo where server_id = 2 and shelves_date < update_time ;
+----+-------+------+-----------+-----------+----------------------------+----------------------------+
| id | name  | port | server_id | is_delete | shelves_date               | update_time                |
+----+-------+------+-----------+-----------+----------------------------+----------------------------+
|  3 | nginx |   80 |         2 |         1 | 2019-06-10 16:41:52.129517 | 2019-06-10 17:38:18.923155 |
|  4 | kafka | 9092 |         2 |         1 | 2019-06-10 16:42:25.561732 | 2019-06-10 17:39:29.302349 |
+----+-------+------+-----------+-----------+----------------------------+----------------------------+
2 rows in set (0.00 sec)

mysql> 

可以从上面的where条件看到有两个过滤条件。

第一个则是 server_id = 2 , 第二个则是 shelves_date < update_time

那么再模型中,怎么写出来呢?

可以使用Q对象来实现,用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db.models import Q
Q(属性名__运算符=) & Q(属性名__运算符=)  ==> and
Q(属性名__运算符=) | Q(属性名__运算符=)   ==> or
~Q(属性名__运算符=)                       ==> not

使用模型编写该示例,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [1]: from assetinfo.models import ServerInfo,MiddlewareInfo

In [2]: from django.db.models import F,Q

In [3]: 

In [5]: MiddlewareInfo.objects.filter( Q( server_id__exact = 2 ) & Q( shelves_date__lt = F('update_time')  ) )
Out[5]: <QuerySet [<MiddlewareInfo: MiddlewareInfo object (3)>, <MiddlewareInfo: MiddlewareInfo object (4)>]>

In [6]: 

对应sql如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2019-06-13T15:43:47.042246Z    14 Query SELECT `assetinfo_middlewareinfo`.`id`, `assetinfo_middlewareinfo`.`name`, `assetinfo_middlewareinfo`.`port`, `assetinfo_middlewareinfo`.`server_id`, `assetinfo_middlewareinfo`.`shelves_date`, `assetinfo_middlewareinfo`.`update_time`, `assetinfo_middlewareinfo`.`is_delete` FROM `assetinfo_middlewareinfo` WHERE (`assetinfo_middlewareinfo`.`server_id` = 2 AND `assetinfo_middlewareinfo`.`shelves_date` < (`assetinfo_middlewareinfo`.`update_time`))  LIMIT 21

上面是and条件的示例,那么现在来执行一下 or ,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [6]: MiddlewareInfo.objects.filter( Q( server_id__exact = 2 ) | Q( shelves_date__lt = F('update_time')  ) )
Out[6]: <QuerySet [<MiddlewareInfo: MiddlewareInfo object (1)>, <MiddlewareInfo: MiddlewareInfo object (2)>, <MiddlewareInfo: M
iddlewareInfo object (3)>, <MiddlewareInfo: MiddlewareInfo object (4)>, <MiddlewareInfo: MiddlewareInfo object (6)>, <Middlewar
eInfo: MiddlewareInfo object (12)>, <MiddlewareInfo: MiddlewareInfo object (13)>, <MiddlewareInfo: MiddlewareInfo object (14)>]
>

对应的SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2019-06-13T15:47:09.063544Z    14 Query SELECT `assetinfo_middlewareinfo`.`id`, `assetinfo_middlewareinfo`.`name`, `assetinfo_middlewareinfo`.`port`, `assetinfo_middlewareinfo`.`server_id`, `assetinfo_middlewareinfo`.`shelves_date`, `assetinfo_middlewareinfo`.`update_time`, `assetinfo_middlewareinfo`.`is_delete` FROM `assetinfo_middlewareinfo` WHERE (`assetinfo_middlewareinfo`.`server_id` = 2 OR `assetinfo_middlewareinfo`.`shelves_date` < (`assetinfo_middlewareinfo`.`update_time`))  LIMIT 21

最后再写一个not关系的,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [7]: MiddlewareInfo.objects.filter( ~Q( server_id__exact = 2 ) )
Out[7]: <QuerySet [<MiddlewareInfo: MiddlewareInfo object (1)>, <MiddlewareInfo: MiddlewareInfo object (2)>, <MiddlewareInfo: M
iddlewareInfo object (5)>, <MiddlewareInfo: MiddlewareInfo object (6)>, <MiddlewareInfo: MiddlewareInfo object (7)>, <Middlewar
eInfo: MiddlewareInfo object (8)>, <MiddlewareInfo: MiddlewareInfo object (9)>, <MiddlewareInfo: MiddlewareInfo object (10)>, <
MiddlewareInfo: MiddlewareInfo object (11)>, <MiddlewareInfo: MiddlewareInfo object (14)>, <MiddlewareInfo: MiddlewareInfo obje
ct (15)>, <MiddlewareInfo: MiddlewareInfo object (16)>]>

对应的执行SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> SELECT `assetinfo_middlewareinfo`.`id`, `assetinfo_middlewareinfo`.`name`, `assetinfo_middlewareinfo`.`port`, `assetinfo_middlewareinfo`.`server_id`, `assetinfo_middlewareinfo`.`shelves_date`, `assetinfo_middlewareinfo`.`update_time`, `assetinfo_middlewareinfo`.`is_delete` FROM `assetinfo_middlewareinfo` WHERE NOT (`assetinfo_middlewareinfo`.`server_id` = 2)  LIMIT 21;
+----+-----------+-------+-----------+----------------------------+----------------------------+-----------+
| id | name      | port  | server_id | shelves_date               | update_time                | is_delete |
+----+-----------+-------+-----------+----------------------------+----------------------------+-----------+
|  1 | memcached | 11211 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:37:51.365155 |         1 |
|  2 | redis     |  6379 |         1 | 2019-06-10 14:56:46.150556 | 2019-06-10 17:38:20.712862 |         1 |
|  5 | test      |   123 |         1 | 2019-06-10 17:05:16.632773 | 2019-06-10 17:05:16.632773 |         1 |
|  6 | test      |   123 |         1 | 2019-06-10 17:06:20.120658 | 2019-06-10 17:06:20.121656 |         1 |
|  7 | test      |   123 |         1 | 2019-06-10 17:06:43.193412 | 2019-06-10 17:06:43.193412 |         1 |
|  8 | test      |   123 |         1 | 2019-06-10 17:07:03.747395 | 2019-06-10 17:07:03.747395 |         1 |
|  9 | test      |   123 |         1 | 2019-06-10 17:08:43.372097 | 2019-06-10 17:08:43.372097 |         1 |
| 10 | test      |   123 |         1 | 2019-06-10 17:09:37.877019 | 2019-06-10 17:09:37.877019 |         1 |
| 11 | test      |   123 |         1 | 2019-06-10 17:11:45.403627 | 2019-06-10 17:11:45.403627 |         1 |
| 14 | mongodb   |  3306 |         1 | 2019-06-11 14:01:24.003175 | 2019-06-11 14:06:14.525648 |         1 |
| 15 | test      |   123 |         1 | 2019-06-11 14:04:10.576241 | 2019-06-11 14:04:10.576241 |         0 |
| 16 | test      |  3306 |         1 | 2019-06-11 14:06:05.608006 | 2019-06-11 14:06:05.608006 |         0 |
+----+-----------+-------+-----------+----------------------------+----------------------------+-----------+
12 rows in set (0.00 sec)

聚合函数

使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。

首先执行一个sql的聚合函数,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select count(1) from assetinfo_middlewareinfo;
+----------+
| count(1) |
+----------+
|       16 |
+----------+
1 row in set (0.00 sec)

mysql> 

在日常的业务中,经常有统计表数量的情况,那么模型需要怎么写呢?如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [9]: MiddlewareInfo.objects.count()
Out[9]: 16

那么sum方法呢?如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select sum(server_id) from assetinfo_middlewareinfo;
+----------------+
| sum(server_id) |
+----------------+
|             20 |
+----------------+
1 row in set (0.00 sec)

对应模型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [14]: from django.db.models import Sum

In [15]: MiddlewareInfo.objects.aggregate(Sum('server_id'))
Out[15]: {'server_id__sum': Decimal('20')}

In [16]: 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.06.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Django 2.1.7 模型的关联
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的F对象、Q对象、聚合查询等功能。
Devops海洋的渔夫
2019/06/17
1.6K0
Django 2.1.7 模型的关联
Django 2.1.7 模型管理器 models.Manager 以及 元选项
上一篇Django 2.1.7 模型的关联 讲述了关于Django模型一对多、多对多、自关联等模型关系。
Devops海洋的渔夫
2019/06/17
1K0
Django 2.1.7 模型管理器 models.Manager 以及 元选项
Django 2.1.7 模型 - 条件查询、模糊查询、空查询、比较查询、范围查询、日期查询
上一篇Django 2.1.7 模型 - MVT模型增删功能讲述了关于MVT模型中列表的增加数据以及删除数据的功能,在数据返回的过程中,也有部分关于模型之间关联查询的数据。
Devops海洋的渔夫
2019/06/15
10.9K0
Django 2.1.7 基于默认sqlite3 模型设计 以及 数据操作
一般操作数据库是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 可以,就是通过接下来要给大家讲的ORM框架。
Devops海洋的渔夫
2019/06/11
1K0
Django 2.1.7 基于默认sqlite3 模型设计 以及 数据操作
Django 2.1.7 模型 - 使用mysql数据库连接访问
上一篇Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据讲述了如何使用sqlite3作为数据库,执行模型查询数据,并返回渲染页面。
Devops海洋的渔夫
2019/06/15
2.3K0
Django 2.1.7 模型 - MVT模型增删功能
上一篇Django 2.1.7 模型类 - 字段类型讲述了关于模型字段类的内容,丰富了不少模型中的字段类型。
Devops海洋的渔夫
2019/06/15
4810
Django 2.1.7 查询集 QuerySet
上一篇Django 2.1.7 模型 - 条件查询 F对象 Q对象 聚合查询讲述了关于Django模型的介绍F对象、Q对象、聚合查询等功能。
Devops海洋的渔夫
2019/06/15
1.2K0
Django 2.1.7 模型类 - 字段类型
上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。
Devops海洋的渔夫
2019/06/15
1.7K0
Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段
https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial07/ 时区 国际化
Devops海洋的渔夫
2019/07/01
2.9K0
Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段
Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据
上一篇文章讲述了Django 2.1.7 创建应用模板,基本已经理解了Django 2.1.7 框架下如何调用模板,并且渲染数据。
Devops海洋的渔夫
2019/06/15
9910
39. Django 2.1.7 Admin - 列表页选项
1)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
Devops海洋的渔夫
2022/01/17
4010
39. Django 2.1.7 Admin - 列表页选项
Django 2.1.7 Admin - 列表页选项
https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial07/
Devops海洋的渔夫
2019/07/08
1.2K0
Django 2.1.7 Admin - 列表页选项
Q查询和F查询
在filter() 等方法中,查询使用的关键字参数是通过 “SQL AND” 连接起来的。如果你要执行更复杂的查询(例如,由 SQL OR 语句连接的查询),可以使用 Q 对象。 一个 Q 对象 (django.db.models.Q) 用于压缩关键字参数集合。
zy010101
2021/10/20
1.5K0
基于python的mysql复制工具
python-mysql-replication 是基于python实现的 MySQL复制协议工具,我们可以用它来解析binlog 获取日志的insert,update,delete等事件 ,并基于此做其他业务需求。比如数据更改时失效缓存,监听dml事件通知下游业务方做对应处理。
用户1278550
2019/07/01
2.6K0
基于python的mysql复制工具
ClickHouse单机部署以及从MySQL增量同步数据
随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能找我能搞定的技术。故引进clickhouse,关于clickhouse在17年本人就开始关注,并且写了一些入门的介绍,直到19年clickhouse功能慢慢的丰富才又慢慢的关注,并且编写了同步程序,把mysql数据实时同步到clickhouse,并且最终在线上使用起来。
用户1278550
2020/05/13
5.6K0
MySQL下的DB link
在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接的人都知道可以跨实例来进行数据查询,同样的,Mysql自带的FEDERATED引擎完美的帮我们解决了该问题。本篇文章介绍FEDERATED引擎的开启和使用。
MySQL技术
2019/09/08
2.4K0
GreatSQL 构建高效 HTAP 服务架构指南(MGR)
本服务架构采用 GreatSQL MGR 架构,在 MGR 架构中部署一个专属 HTAP 服务节点。Primary 节点采用默认 InnoDB 引擎,Secondary 节点使用辅助引擎 Rapid 加速查询构建专属 HTAP 只读节点。加上 MySQL Router 等之类的代理/中间件负责读写分离来完成 HTAP 服务架构。
GreatSQL社区
2024/07/26
1300
GreatSQL 构建高效 HTAP 服务架构指南(MGR)
MySQL下FEDERATED引擎的开启和使用
在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接的人都知道可以跨实例来进行数据查询,同样的,MySQL自带的FEDERATED引擎完美的帮我们解决了该问题。本篇文章介绍FEDERATED引擎的开启和使用。
星哥玩云
2022/08/18
3.4K0
Django教程 —— 模型类条件查询
实现 sql 中 where 的功能,调用过滤器 filter()、exclude()、get(),下面以filter()为例。
忆想不到的晖
2021/09/29
1.2K0
【谷粒学院】003-Mybatis Plus:分页查询、逻辑删除、性能分析插件、条件查询
注意:map中的key对应的是数据库中的列名。例如数据库user_id,实体类是userId,这时map的key需要填写user_id;
訾博ZiBo
2025/01/06
7290
【谷粒学院】003-Mybatis Plus:分页查询、逻辑删除、性能分析插件、条件查询
相关推荐
Django 2.1.7 模型的关联
更多 >
LV.1
腾讯全栈开发工程师
目录
  • 参考文献
  • F对象
  • Q对象
  • 聚合函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档