开箱即用的GO后台管理系统 Kratos Admin - 列表查询规则

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Kratos Admin 是一个开箱即用的GO后台管理系统,支持通用列表查询请求。通过 `page`、`pageSize`、`query`(AND过滤)、`or`(OR过滤)、`orderBy`(排序)、`noPaging`(不分页)和 `fieldMask`(字段掩码)等参数,灵活配置查询条件。过滤规则遵循Python ORM风格,支持多种查找类型如 `in`、`gte`、`icontains` 等,适用于不同数据库。

开箱即用的GO后台管理系统 Kratos Admin - 列表查询规则

通用列表查询请求

字段名 类型 格式 字段描述 示例 备注
page number 当前页码 默认为1,最小值为1
pageSize number 每页的行数 默认为10,最小值为1
query string json objectjson object array AND过滤条件 json字符串: {"field1":"val1","field2":"val2"} 或者[{"field1":"val1"},{"field1":"val2"},{"field2":"val2"}] maparray都支持,当需要同字段名,不同值的情况下,请使用array。具体规则请见:过滤规则
or string json objectjson object array OR过滤条件 同 AND过滤条件
orderBy string json string array 排序条件 json字符串:["-create_time", "type"] json的string array,字段名前加-是为降序,不加为升序。具体规则请见:排序规则
noPaging boolean 是否不分页 此字段为true时,pagepageSize字段的传入将无效用。
fieldMask string 其语法为使用逗号分隔字段名 字段掩码 例如:id,realName,userName。 此字段是SELECT条件,为空的时候是为*

排序规则

排序操作本质上是SQL里面的Order By条件。

序列 示例 备注
升序 ["type"]
降序 ["-create_time"] 字段名前加-是为降序

过滤规则

过滤器操作本质上是SQL里面的WHERE条件。

过滤器的规则,遵循了Python的ORM的规则,比如:

如果只是普通的查询,只需要传递字段名即可,但是如果需要一些特殊的查询,那么就需要加入操作符了。

特殊查询的语法规则其实很简单,就是使用双下划线__分割字段名和操作符:

{字段名}__{查找类型} : {值}
{字段名}.{JSON字段名}__{查找类型} : {值}
查找类型 示例 SQL 备注
not {"name__not" : "tom"} WHERE NOT ("name" = "tom")
in {"name__in" : "[\"tom\", \"jimmy\"]"} WHERE name IN ("tom", "jimmy")
not_in {"name__not_in" : "[\"tom\", \"jimmy\"]"} WHERE name NOT IN ("tom", "jimmy")
gte {"create_time__gte" : "2023-10-25"} WHERE "create_time" >= "2023-10-25"
gt {"create_time__gt" : "2023-10-25"} WHERE "create_time" > "2023-10-25"
lte {"create_time__lte" : "2023-10-25"} WHERE "create_time" <= "2023-10-25"
lt {"create_time__lt" : "2023-10-25"} WHERE "create_time" < "2023-10-25"
range {"create_time__range" : "[\"2023-10-25\", \"2024-10-25\"]"} WHERE "create_time" BETWEEN "2023-10-25" AND "2024-10-25"

WHERE "create_time" >= "2023-10-25" AND "create_time" <= "2024-10-25"
需要注意的是:
1. 有些数据库的BETWEEN实现的开闭区间可能不一样。
2. 日期2005-01-01会被隐式转换为:2005-01-01 00:00:00,两个日期一致就会导致查询不到数据。
isnull {"name__isnull" : "True"} WHERE name IS NULL
not_isnull {"name__not_isnull" : "False"} WHERE name IS NOT NULL
contains {"name__contains" : "L"} WHERE name LIKE '%L%';
icontains {"name__icontains" : "L"} WHERE name ILIKE '%L%';
startswith {"name__startswith" : "La"} WHERE name LIKE 'La%';
istartswith {"name__istartswith" : "La"} WHERE name ILIKE 'La%';
endswith {"name__endswith" : "a"} WHERE name LIKE '%a';
iendswith {"name__iendswith" : "a"} WHERE name ILIKE '%a';
exact {"name__exact" : "a"} WHERE name LIKE 'a';
iexact {"name__iexact" : "a"} WHERE name ILIKE 'a';
regex `{"title__regex" : "^(An?\ The) +"}` MySQL: `WHERE title REGEXP BINARY '^(An?\ The) +'<br> Oracle:WHERE REGEXP_LIKE(title, '^(An?\ The) +', 'c');<br> PostgreSQL:WHERE title ~ '^(An?\ The) +';<br> SQLite:WHERE title REGEXP '^(An?\ The) +';`
iregex `{"title__iregex" : "^(an?\ the) +"}` MySQL: `WHERE title REGEXP '^(an?\ the) +'<br> Oracle:WHERE REGEXP_LIKE(title, '^(an?\ the) +', 'i');<br> PostgreSQL:WHERE title ~* '^(an?\ the) +';<br> SQLite:WHERE title REGEXP '(?i)^(an?\ the) +';`
search

以及将日期提取出来的查找类型:

查找类型 示例 SQL 备注
date {"pub_date__date" : "2023-01-01"} WHERE DATE(pub_date) = '2023-01-01'
year {"pub_date__year" : "2023"} WHERE EXTRACT('YEAR' FROM pub_date) = '2023' 哪一年
iso_year {"pub_date__iso_year" : "2023"} WHERE EXTRACT('ISOYEAR' FROM pub_date) = '2023' ISO 8601 一年中的周数
month {"pub_date__month" : "12"} WHERE EXTRACT('MONTH' FROM pub_date) = '12' 月份,1-12
day {"pub_date__day" : "3"} WHERE EXTRACT('DAY' FROM pub_date) = '3' 该月的某天(1-31)
week {"pub_date__week" : "7"} WHERE EXTRACT('WEEK' FROM pub_date) = '7' ISO 8601 周编号 一年中的周数
week_day {"pub_date__week_day" : "tom"} `` 星期几
iso_week_day {"pub_date__iso_week_day" : "tom"} ``
quarter {"pub_date__quarter" : "1"} WHERE EXTRACT('QUARTER' FROM pub_date) = '1' 一年中的季度
time {"pub_date__time" : "12:59:59"} ``
hour {"pub_date__hour" : "12"} WHERE EXTRACT('HOUR' FROM pub_date) = '12' 小时(0-23)
minute {"pub_date__minute" : "59"} WHERE EXTRACT('MINUTE' FROM pub_date) = '59' 分钟 (0-59)
second {"pub_date__second" : "59"} WHERE EXTRACT('SECOND' FROM pub_date) = '59' 秒 (0-59)

项目代码

目录
相关文章
|
5天前
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
31 10
|
1月前
|
算法 安全 Go
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
本文探讨了如何利用 Go 语言中的 Bloom Filter 算法提升公司局域网管理系统的性能。Bloom Filter 是一种高效的空间节省型数据结构,适用于快速判断元素是否存在于集合中。文中通过具体代码示例展示了如何在 Go 中实现 Bloom Filter,并应用于局域网的 IP 访问控制,显著提高系统响应速度和安全性。随着网络规模扩大和技术进步,持续优化算法和结合其他安全技术将是企业维持网络竞争力的关键。
50 2
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
|
2月前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
41 5
|
1月前
|
前端开发 Go API
开箱即用的GO后台管理系统 Kratos Admin - 前端权限
Kratos Admin 是一个开箱即用的 GO 后台管理系统,前端权限管理分为路由和按钮权限。路由权限支持后端动态生成和前端固定配置两种方式,通过 `.env` 文件配置 `VITE_ROUTER_ACCESS_MODE` 实现。按钮权限可通过权限码或角色控制,支持组件、API 和指令三种方式。项目代码托管于 Gitee 和 Github。
26 0
|
1月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
36 0
|
4月前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
247 1
|
4月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
77 1
|
5月前
|
存储 Go 文件存储
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第12天】本文详细介绍了如何使用M.2移动硬盘制作Win To Go系统。首先,需准备合适容量与接口类型的M.2硬盘及硬盘盒,并获取Windows镜像文件和分区工具。接着,通过Rufus软件将镜像写入硬盘。文中还提供了分区策略,包括系统分区(约80-120GB)、软件分区(根据需求设定)和数据分区(剩余空间),并指导如何使用DiskGenius或Windows自带工具进行分区。最后,强调了对各分区文件的有效管理和定期备份的重要性。
421 3
|
5月前
|
存储 固态存储 Go
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第11天】Win To Go 是一种将 Windows 系统安装在 M.2 移动硬盘上的技术,便于用户携带自定义系统跨设备使用。需准备高性能 M.2 硬盘及合适硬盘盒,并使用 DiskGenius 或 Rufus 进行分区与系统安装。系统分区用于安装 Windows,其余分区可根据需求存储工作或娱乐文件,便于管理和备份。
500 2
|
5月前
|
Java Go 云计算
Go语言在云计算和高并发系统中的卓越表现
【10月更文挑战第10天】Go语言在云计算和高并发系统中的卓越表现