CN113609154B - 一种数据查询方法、装置、电子设备和存储介质 - Google Patents

一种数据查询方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN113609154B
CN113609154B CN202110904413.2A CN202110904413A CN113609154B CN 113609154 B CN113609154 B CN 113609154B CN 202110904413 A CN202110904413 A CN 202110904413A CN 113609154 B CN113609154 B CN 113609154B
Authority
CN
China
Prior art keywords
list
query
operator
operand
operands
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110904413.2A
Other languages
English (en)
Other versions
CN113609154A (zh
Inventor
邱世阳
胡志鹏
程龙
刘勇成
袁思思
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202110904413.2A priority Critical patent/CN113609154B/zh
Publication of CN113609154A publication Critical patent/CN113609154A/zh
Application granted granted Critical
Publication of CN113609154B publication Critical patent/CN113609154B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据查询方法、装置、电子设备和存储介质,本发明使用的查询信息为嵌套列表格式,包括至少两层嵌套的列表,每层列表包括操作符及对应的操作数,至少一层列表的操作数中包括待查询的目标字段,本发明可接收终端发送的嵌套列表格式的查询信息,基于每一层列表中的操作符对操作符对应的操作数进行解析,得到操作数的解析结果,然后基于列表中的操作符和操作数的解析结果生成预设格式的目标查询语句,基于目标查询语句得到查询结果,由于该查询信息基于多层的列表嵌套而成,故支持将查询结果的复杂筛选条件拆分到不同层列表中表达,从而支持对复杂筛选条件的表达,并且采用本发明有效避免了采用SQL字符串带来的SQL注入问题。

Description

一种数据查询方法、装置、电子设备和存储介质
技术领域
本发明涉及计算机技术领域,具体涉及一种数据查询方法、装置、电子设备和存储介质。
背景技术
相关技术中,前端需要向后端查询数据时,一般是基于查询语句如SQL(Structured Query Language,结构化查询语言)语句实现的。
例如,前端会发送SQL字符串给后端,由后端解析SQL字符串,进行拼接得到SQL语句然后进行查询。这种查询方案依赖字符串匹配和拼接,容易出现SQL注入等问题,且不能很好地表达针对查询结果的复杂筛选条件。
发明内容
本发明实施例提供一种数据查询方法、装置、电子设备和存储介质,可以较好地避免SQL注入的问题,还支持表达复杂筛选条件。
本发明实施例提供一种数据查询方法,该方法包括:
接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;
基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
基于所述目标查询语句进行查询,得到查询结果。
本发明实施例提供一种数据查询方法,该方法包括:
响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
向服务器发送所述嵌套列表格式的查询信息。
本发明实施例还提供一种数据查询装置,该装置包括:
接收单元,用于接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
嵌套解析单元,用于分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;
查询语句生成单元,用于基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
查询单元,用于基于所述目标查询语句进行查询,得到查询结果。
在一个可选的示例中,嵌套解析单元,用于:
若所述查询信息的最外层列表中的操作符是预设的递归操作符,确定所述最外层列表中的各操作数为内嵌的列表;
从未解析的所述列表中选择当前解析列表;
若所述当前解析列表中的操作符是预设的递归操作符,确定所述当前解析列表中的各操作数为新的内嵌的列表,返回执行所述从未解析的所述列表中选择当前解析列表的步骤;
若所述当前解析列表中的操作符不是预设的递归操作符,则确定所述当前解析列表中的操作数不是内嵌的列表,对所述当前解析列表中的操作数进行解析,得到所述操作数的解析结果,返回执行所述从未解析的所述列表中选择当前解析列表的步骤,直到所有层的列表解析完成。
在一个可选的示例中,查询语句生成单元,用于基于相同列表中操作符指示的对操作数执行的操作,以及所述操作数的解析结果,对相同列表中的操作数的解析结果按照预设格式的查询语句所需的形式进行合并,得到预设格式的目标查询语句。
在一个可选的示例中,查询语句生成单元,用于:
选择所述列表中最内层列表外嵌的列表作为当前合并列表,基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进合并得到新的解析结果;
将新的解析结果作为所述当前合并列表外嵌的列表中操作数的解析结果,将所述当前合并列表外嵌的列表作为新的当前合并列表,返回执行所述基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进行合并得到新的解析结果的步骤,直到对最外层列表中操作数的解析结果进行合并得到新的解析结果为止;
将所述查询信息的最外层列表对应的新的解析结果,确定为目标查询语句。
在一个可选的示例中,查询语句生成单元,用于将当前合并列表中的操作符转换为预设格式的查询语句中表示相同操作的第一目标字符,以所述第一目标字符连接所述当前合并列表中操作数对应的解析结果,得到新的解析结果。
其中,以第一目标字符连接所述当前合并列表中操作数对应的解析结果,得到新的解析结果时,可以基于操作数的数量以及操作符对应的操作来确定第一目标字符与操作数的解析结果的相对位置,例如,操作数的数量有两个,第一目标字符对应的操作表示大于,则第一目标字符可以为“>”符号,位于两个操作数的解析结果的中间。一个示例中,操作符转换得到的第一目标字符可以为空,例如“col”表示取出对应名称的列,转换成的第一目标字符为空。
在一个可选的示例中,装置还包括权限检查单元,用于:
若列表中的操作符对应的操作数指示待查询的目标字段,从所述操作符的操作数中获取所述待查询的目标字段;
确定所述终端是否具有所述目标字段的查询权限,若否,则中断所述查询信息的查询过程,以避免执行所述基于所述目标查询语句进行查询,得到查询结果的步骤。
在一个可选的示例中,所述查询信息为json格式或map格式的信息,接收单元用于:通过HTTP接口接收终端发送的嵌套列表格式的查询信息。
本发明实施例还提供一种数据查询装置,该装置包括:
第一指令处理单元,用于响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
第二指令处理单元,用于若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
第三指令处理单元,用于若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
确定单元,用于基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
发送单元,用于向服务器发送所述嵌套列表格式的查询信息。
在一个可选的示例中,装置还包括:第一生成单元和第二生成单元;
第一生成单元,用于在响应于针对待生成的查询信息的第一设置指令前,显示第一设置页面,所述第一设置页面用于设置查询信息的最外层列表中的操作符以及操作数数量;响应于针对第一设置页面的第一设置操作,获取最外层列表的操作符和操作数数量,基于所述操作符和操作数数量生成第一设置指令;
第二生成单元,用于在接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数前,响应于针对第一设置页面的操作数选择操作,显示被选择的操作数对应的待填充列表的第二设置页面;响应于针对第二设置页面的第二设置操作,获取所述待填充列表中的操作符和操作数数量,基于所述操作符和操作数数量生成第二设置指令。
在一个可选的示例中,装置还包括前端显示单元,用于:
在基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息后,分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果;
将列表中的操作符和操作数的解析结果,分别转换为终端显示所需的第二目标字符和文本信息,并基于列表的嵌套关系组合所述第二目标字符和文本信息,得到在终端显示的查询描述语句;
在所述终端显示所述查询描述语句。
本发明实施例还提供一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上所述方法的步骤。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上所述方法的步骤。
本发明实施例提供了一种数据查询方法、装置、电子设备和存储介质,本实施例的查询信息为嵌套列表格式,查询信息包括至少两层嵌套的列表,每层列表包括操作符以及操作符对应的至少一个操作数,操作符表示对对应的操作数执行的操作,至少一层列表的操作数中包括待查询的目标字段,本实施例可以接收终端发送的嵌套列表格式的查询信息,分析查询信息中的每一层列表,基于每一层列表中的操作符对操作符对应的操作数进行解析,得到操作数的解析结果,然后基于列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句,然后基于目标查询语句进行查询,得到查询结果,由于本实施例的查询信息是基于嵌套列表的结构生成的、由不同层的列表嵌套而成的查询信息,所以基于列表的嵌套可以支持将复杂筛选条件拆分到不同层的列表中进行表达,从而了支持对复杂筛选条件的表达,并且采用本实施例有效避免了采用SQL字符串带来的SQL注入问题。
进一步的,嵌套列表格式的查询信息可以保存为json字符串等格式通过HTTP接口传输,适用于多种编程语言,所以本实施例的适应性得到了极大的提升。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的数据查询系统的示意图;
图2是本发明实施例提供的一种数据查询方法的流程示意图;
图3a是本发明实施例提供的一种数据查询方法的流程示意图;
图3b-3h是本发明实施例设置查询信息中各列表的操作符和操作数的示意图;
图4是本发明实施例提供的一种数据查询装置的结构示意图;
图5是本发明实施例提供的另一种数据查询装置的结构示意图;
图6是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种数据查询方法、装置、电子设备和计算机可读存储介质。具体地,本实施例提供适用于数据查询装置的数据查询方法,该数据查询装置可以集成在电子设备中。该电子设备可以为终端等设备,例如可以为手机、平板电脑、笔记本电脑、台式电脑等。也可以为服务器等设备。
其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。
本实施例的数据查询方法,可以由服务器实现,或可以由终端实现,或者可以由终端和服务器共同实现。
本实施例终端和服务器共同实现数据查询方法为例进行示例说明。
参考图1,本发明实施例提供的数据查询系统包括终端10和服务器20等;终端10和服务器20之间通过网络连接,比如,通过有线或无线网络连接等。
终端10可以用于响应于针对待生成的查询信息的第一设置指令,基于第一设置指令获取待生成的查询信息中最外层列表的操作符,以及确定操作符对应的操作数,其中,最外层列表中的操作数为待填充列表;若接收到针对待填充列表的第二设置指令,确定待填充列表中的操作符以及操作数;若待填充列表中的操作符为预设的递归操作符,则待填充列表中的操作符对应的操作数为新的待填充列表,返回执行若接收到针对待填充列表的第二设置指令,确定待填充列表中的操作符以及操作数的步骤,直到查询信息的最内层列表中的操作数不是待填充列表为止;基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;向服务器发送嵌套列表格式的查询信息。以及接收查询信息的查询结果。
服务器20可以用于接收终端发送的嵌套列表格式的查询信息;分析查询信息中的每一层列表,基于每一层列表中的操作符对操作符对应的操作数进行解析,得到操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;基于列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;基于目标查询语句进行查询,得到查询结果。
以下分别进行详细说明,需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本发明实施例的一个方面提供了一种数据查询方法,如图2所示,本实施例的数据查询方法的流程可以如下:
201、接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
在实际中,进行交互式的数据查询时,最好有一种表示查询的目标字段、查询条件的方式,能在UI(User Interface,用户界面)渲染结果、前端记录格式、后端API接口格式、SQL生成结果这几种形态之间进行转化。
所以,对交互式的数据查询而言,最好能够需要支持下列方向的转化:
前端记录格式->后端API接口格式->SQL生成结果;
前端记录格式->UI渲染结果;
如果需要支持查询历史记录类型的功能,还需要支持:后端API接口格式->前端记录格式。
相关技术中,有以下几种查询方案:
1、前后端通过接口进行数据交互以查询数据时,通常会将每一行数据抽象为一个对象,然后使用定制化的接口传输该对象。
当前,使用最广泛的接口设计方式是Rest-API和GraphQL。
2、对复杂的SQL查询,另一种实现方式是前端直接传输SQL字符串,后端解析SQL字符串进行拼接得到SQL语句后直接执行SQL语句。
3、基于特定的查询描述语言进行查询。例如ElasticSearch使用的QueryDSL。
本实施例中,前端与后端相对,前端可以理解为终端侧,后端可以理解为服务器侧。
第1个方案的缺点包括:Rest-API和GraphQL这两种接口设计均难以支持复杂的查询条件,也很难灵活地实现聚合字段查询。例如,对以下SQL语句:
SELECTcareer,COUNT(IF(force>2000,1,NULL)),COUNT(*)
FROMrole_info
GROUPBYcareer
WHERE
(serverIN(1,2)ANDdsBETWEEN‘2021-04-01’AND‘2021-04-10’)
OR(serverIN(3,4)ANDdsBETWEEN‘2021-04-11’AND‘2021-04-20’)
上述两种接口模型均无法直接满足COUNT(IF(force>2000,1,NULL))这种复杂的聚合字段,也无法直接满足(serverIN(1,2)ANDdsBETWEEN‘2021-04-01’AND‘2021-04-10’),OR(serverIN(3,4)ANDdsBETWEEN‘2021-04-11’AND‘2021-04-20’)这种复杂的多层嵌套筛选条件。
因此,使用此类接口设计时,需要将每种可能的查询分别实现为一个查询接口,将具体的条件作为接口的参数。对数据获取应用,该方案的接口实现成本过高,难以满足需求。
对于第2种方案,后端将给出的SQL字符串和预定义的模板进行拼接后得到完整SQL语句并执行。该方案会导致后端难以进行权限判断,难以避免SQL注入等问题,存在极高的安全风险。
对于第3种方案,ElasticSearch使用的QueryDSL是针对ES的数据结构进行了专门设计的格式,与SQL查询需求匹配程度不高。
鉴于上述方案的缺点,本申请设计了一种基于嵌套list(即嵌套列表)格式的查询信息,该查询信息在解析上具有较大的优势,可以利用各语言广泛支持的json格式解析器简化解析实现。
本申请使用的嵌套list格式的查询信息可以较为方便地转换为后端需要的SQL语句以及前端的UI渲染结果,并且对于查询目标,查询信息能表达聚合字段、多个字段的计算/比较结果、通过复杂计算得到的派生字段等。对于筛选条件,通过多层嵌套的列表能表达多层嵌套的AND/OR条件、SQL引擎的函数/表达式等。
且采用嵌套列表格式的查询信息,在解析时无需进行字符串匹配,降低了SQL注入出现的概率。
为便于理解,先对嵌套列表格式进行描述:嵌套列表中每一个表达式均为一个list,一个表达式中包括操作符和操作数。
List的第一项为字符串,即操作符,该操作符指出对list的操作数所执行的操作的名称,例如,操作符包括但不限于max/min/sum/col/val,本实施例中可以根据需要设置嵌套列表的查询信息解析时使用的操作符数据库,以便支持更多的操作。
List的第一项之后的后续项为操作符的参数,即操作数,该参数可能是另一个表达式,即另一个list,也可能是一个实际取值。
例如:
操作符col表示取出对应名称的列,有一个字符串参数。如:['col','p1.force'],表示取出数据表中目标字段“p1.force”中的数据。
操作符max表示计算最大值,有一个表达式参数,即内嵌的列表。例如:['max',['col','p1.force']],表示对目标字段“p1.force”中的数据计算最大值。
操作符val表示取字面数值,有一个任意类型的非表达式参数。例如:['val',2000],表示取值2000。
操作符gt表示大小比较,有两个表达式参数,结果为(参数1>参数2)。例如:['gt',['col','p1.force'],['val',2000]],表示取出p1.force大于2000的比较结果。
操作符if表示条件判断,有3个表达式参数。当参数1成立时,返回参数2,否则返回参数3。例如:['if',['gt',['col','p1.force'],['val',2000]],['val',1],['val',None]],表示若存在p1.force大于2000的数据,输出1,否则,输出为空。该示例中,if是最外层列表的操作符,最外层列表内嵌有三个列表,即['gt',['col','p1.force'],['val',2000]],和['val',1],以及['val',None],其中,后两个列表中没有内嵌列表,第一个列表中,还内嵌有两个列表['col','p1.force']和['val',2000]。
本实施例中,基于步骤203中的目标查询语句进行查询时需要知道查询的数据表,该数据表的标识信息如表名,表的ID号等可以由终端发送,如终端发送查询信息时还发送数据表的标识信息。服务器在进行查询时,可以先基于标识信息确定待查询的数据表,基于步骤203得到的目标查询语句在该数据表中进行查询,得到查询结果。
202、分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;
在步骤202中,可以按照查询信息中列表从外到内的顺序,依次解析各层列表得到解析结果。可选的,步骤202可以包括:
A、若所述查询信息的最外层列表中的操作符是预设的递归操作符,确定所述最外层列表中的各操作数为内嵌的列表;
B、从未解析的所述列表中选择当前解析列表;
C、若所述当前解析列表中的操作符是预设的递归操作符,确定所述当前解析列表中的各操作数为新的内嵌的列表,返回执行所述从未解析的所述列表中选择当前解析列表的步骤;
D、若所述当前解析列表中的操作符不是预设的递归操作符,则确定所述当前解析列表中的操作数不是内嵌的列表,对所述当前解析列表中的操作数进行解析,得到所述操作数的解析结果,返回执行所述从未解析的所述列表中选择当前解析列表的步骤,直到所有层的列表解析完成。
其中,递归操作符可以预先设置,在设置递归操作符时,可以根据同一列表中操作符后对应的操作数中是否包含新的操作符来确定该操作符是否为递归操作符,例如若在生成列表时,某操作符对应的操作数中可以包含新的操作符,则该操作符可以归类为递归操作符。其中,递归操作符可以设置在一个集合中,步骤“若所述当前解析列表中的操作符是预设的递归操作符,确定所述当前解析列表中的各操作数为新的内嵌的列表,包括:
将当前解析列表中的操作符与递归操作符集合中的递归操作符进行匹配,若匹配成功,则确定所述当前解析列表中的各操作数为新的内嵌的列表。
其中,在步骤C和步骤D中,返回执行从未解析的列表中选择当前解析列表的步骤时,选择的规则不限。
例如,选择规则可以包括:若当前解析列表中包含至少一个未解析的列表,则可以从当前解析列表中包含的未解析列表中选择新的当前解析列表,若当前解析列表中不包含未解析列表,则可以从查询信息的未解析列表中选择距离当前解析列表最近的未解析列表作为新的当前解析列表。
其中,列表之间的距离基于列表的层次和嵌套关系确定,内嵌于同一列表的层次最近。
其中,若当前解析列表包含的未解析列表数量大于1,则选择的新的当前解析列表的数量可以是多个(如全部未解析列表)或一个,本实施例对此没有限制。
203、基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
本实施例中,预设格式的目标查询语句可以是SQL查询语句,可以理解的是,嵌套列表中的操作符有一些是不符合SQL语句的形式的,例如操作符“gt”,表示大于,在SQL查询语句中表示大于的字符为“>”。所以本实施例中,生成预设格式的目标查询语句时,需要基于目标查询语句的需要,对查询信息的解析结果进行一定的转换。
可选的,步骤203可以包括:基于相同列表中操作符指示的对操作数执行的操作,以及所述操作数的解析结果,对相同列表中的操作数的解析结果按照预设格式的查询语句所需的形式进行合并,得到预设格式的目标查询语句。
其中,可以将操作符转换为预设格式的查询语句中表示相同操作的第一目标字符,基于每一层列表中操作符对应的第一目标字符以及操作数对应的解析结果进行组合,得到预设格式的目标查询语句。
在一个可选的示例中,合并得到目标查询语句的方案中,可以按照查询信息中的列表从内到外的方式进行合并。
具体的,步骤“基于相同列表中操作符指示的对操作数执行的操作,以及所述操作数的解析结果,对相同列表中的操作数的解析结果按照预设格式的查询语句所需的形式进行合并,得到预设格式的目标查询语句”,可以包括:
选择所述列表中最内层列表外嵌的列表作为当前合并列表,基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进合并得到新的解析结果;
将新的解析结果作为所述当前合并列表外嵌的列表中操作数的解析结果,将所述当前合并列表外嵌的列表作为新的当前合并列表,返回执行所述基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进行合并得到新的解析结果的步骤,直到对最外层列表中操作数的解析结果进行合并得到新的解析结果为止;
将所述查询信息的最外层列表对应的新的解析结果,确定为目标查询语句。
其中,最内层列表的数量可以有多个,不同的最内层列表可以属于同一个列表或不同的列表,可选的,若某列表中的操作数都不是新列表,且该列表可以认为是最内层列表。
其中,在对当前合并列表的操作数的解析结果进行合并时,具体可以包括:将当前合并列表中的操作符转换为预设格式的查询语句中表示相同操作的第一目标字符,以所述第一目标字符连接所述当前合并列表中操作数对应的解析结果,得到新的解析结果。
为了便于上述方案的理解,本实施例在此举例说明基于查询信息解析得到SQL查询语句的方案。
例如,以如下的查询信息的实际解析为例:
[
'and',
['gt',['col','p1.force'],['val',1000]],
['gt',['col','p1.force'],['*',['col','p1.level'],['val',10]]],
]
其SQL语句生成过程示例
代码实现:
bin_op_map={
'*':'*',
'gt':'>',
}
defparse_to_sql(data):
"""SQL语句生成简化版实现示例"""
#检查操作符
op=data.pop(0)
#非递归操作符-取原始数据
ifop=='val':
returnrepr(data[0])
#非递归操作符-指定列
ifop=='col':
returndata[0]
#递归操作符
#递归地解析所有子操作数
args=[parse_to_sql(item)foritemindata]
#将所有子操作数的解析结果根据操作符进行合并
ifopinbin_op_map:
#合并二元操作符
return"%s%s%s"%(args[0],bin_op_map[op],args[1])
ifop=='and':
#合并and
return"AND".join(args)
ifop=='or':
#合并or
return"OR".join(args)
raiseValueError("未知操作%s"%op)
以下描述上述查询信息的实际解析过程:
1.操作符为‘and’,递归操作
/>
/>
204、基于所述目标查询语句进行查询,得到查询结果。
本实施例中,还可以方便地添加字段级别的权限检查功能,例如,本实施例还可以包括:若列表中的操作符对应的操作数指示待查询的目标字段,从所述操作符的操作数中获取所述待查询的目标字段;
确定所述终端是否具有所述目标字段的查询权限,若否,则中断所述查询信息的查询过程,以避免执行所述基于所述目标查询语句进行查询,得到查询结果的步骤。
其中,确定列表中的操作符对应的操作数是否指示待查询的目标字段的方式可以包括:对列表中的操作符对应的操作数进行分析,以确定操作数是否指示待查询的目标字段。
实际中,与目标字段组成列表的操作符一般是有限的,本实施例可以预先将这些会以字段作为操作数的操作符,设置为特定操作符。其中,特定操作符也可以预先设置在一个集合中,在需要的时候,将列表中读取的操作符与该集合进行匹配即可,匹配成功,则列表中的该操作符为特定操作符,由此,无需解析操作数就可以确定操作数是否为用于查询的字段信息。
其中,终端对目标字段的查询权限可以设置在该终端对应的终端信息中,可以基于与终端的通信获取终端标识,基于终端标识获取终端信息,以从终端信息中确定终端是否具有目标字段的查询权限。
其中,本实施例的查询信息的数据格式可以包括json格式或map格式,例如生成查询信息后,可以将查询信息转换为json格式,或map格式。
其中,查询信息['col','p1.rid']可以转换为map格式,如{'op':'col','column':'p1.rid'}或{'col':'p1.rid'},实现更友好的语义
可选的,步骤“所述接收终端发送的嵌套列表格式的查询信息”,可以包括:通过HTTP接口接收终端发送的嵌套列表格式的查询信息。
采用本实施例,由于该查询信息由多层的列表嵌套而成,故支持将查询结果的复杂筛选条件拆分到不同层列表中表达,从而支持对复杂筛选条件的表达,并且采用本发明有效避免了采用SQL字符串带来的SQL注入问题。
进一步的,嵌套列表格式的查询信息可以保存为json字符串等格式通过HTTP接口传输,适用于多种编程语言,所以本实施例的适应性得到了极大的提升。
本发明实施例的一个方面提供了一种数据查询方法,如图3a所示,本实施例的数据查询方法的流程可以如下:
301、响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
可选的,本实施例的第一设置指令可以通过第一设置页面来触发,第一设置页面用于设置查询信息的最外层列表中的操作符以及操作数数量;
可选的,响应于针对待生成的查询信息的第一设置指令前,本实施例的方法还包括:
显示第一设置页面;
响应于针对第一设置页面的第一设置操作,获取最外层列表的操作符和操作数数量,基于所述操作符和操作数数量生成第一设置指令。
对应的,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数可以包括:
基于第一设置指令中的操作符确定待生成的查询信息中最外层列表的操作符,基于第一设置指令中的操作数数量确定操作符对应的操作数的数量。
例如,参见图3b,第一设置页面界面开始只有一个'添加条件'选项。对应无条件null,点击选项后,需要指定操作符。因为此处选择的是筛选条件,最外层需要是逻辑操作符,即上述的递归操作符,例如AND/OR/大于/小于/等于等。例如,选择OR作为最外层的条件,操作数数量为2,则第一设置页面更新为图3c所示,显示有每个操作数对应的选项,以及操作数之间的关系“或”,图3c对应查询信息[‘or’,<条件1>,<条件2>],其中<条件1>和<条件2>为待填充的列表。对每个待填充的列表,继续递归地进行选择操作。
302、若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
303、若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
本实施例中,对第二设置指令的设置,可以基于第二设置页面显示,第二设置页面是用于设置待填充列表的操作符和操作数的页面,一个示例中,第一设置页面和第二设置页面可以是相同的页面,一个示例中,也可以是不同的页面。
可选的,步骤302之前,还包括:
响应于针对第一设置页面的操作数选择操作,显示被选择的操作数对应的待填充列表的第二设置页面;
响应于针对第二设置页面的第二设置操作,获取所述待填充列表中的操作符和操作数数量,基于所述操作符和操作数数量生成第二设置指令。
对应的,若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数,可以包括:
基于第二设置指令中的操作符确定待填充列表中的操作符,基于第二设置指令中的操作数数量确定操作符对应的操作数的数量。
在一个示例中,若待填充列表中的操作符不是预设的递归操作符,则响应于第二设置操作,获取的信息中除了操作符和操作数数量,还可以包括操作符对应的操作数信息。基于第二设置指令中的操作符和操作数信息,可以在操作符不属于递归操作符时,确定待填充列表中的操作符和操作符对应的操作数。
其中,所有用于设置待填充列表中的操作符和操作数的页面都可以称为第二设置页面,本实施例中的第二设置页面的数量不限,可以是一个或多个。
例如,在图3c所示的第一设置页面中,点击某个操作数选项如条件1,则触发了操作数选择操作,显示该操作数对应的第二设置页面(参见图3d)。
例如,对条件1选择常见的操作符IN,得到查询信息[‘or’,[‘in’,<子条件1.1>,<子条件1.2>],<条件2>],然后对子条件1.1,参见图3d,选择字段:基础属性/职业。通过操作符in和第一个操作数<子条件1.1>,可以判断出第二个操作数的可取值类型。
例如,本例中操作符为IN,第一个操作数为枚举类型,那么第二个操作数应当为该枚举类型的所有可取值的组合。则点击图3d中的确定控件,显示图3e中的第二设置页面,在第二设置页面中可以选择<子条件1.2>。此时,条件1已经确定。整个查询信息为:[‘or’,[‘in’,[‘col’,‘basic.career’],[‘val’,[1,2]]],<条件2>]。
也可以通过上述的步骤生成针对条件2的第二设置指令,得到条件2对应的列表,例如,对于图3f中的条件2,操作符为BETWEEN,整个条件对应的查询信息为:[‘or’,[‘in’,[‘col’,‘basic.career’],[‘val’,[1,2]]],[‘between’,[‘col’,‘basic.force’],[‘val’,20],[‘val’,1000]]。
可以理解的是,如果需要进行嵌套的AND/OR选择,在设置条件2时可以继续选择条件2的列表中的操作符AND,例如,参考图3g,此时的对应条件为[‘or’,[‘in’,[‘col’,‘basic.career’],[‘val’,[1,2]]],[‘and’,<子条件2.1>,<子条件2.2>]],上述两个子条件2.1和2.2的选择仍然通过上述步骤完成,此处不再赘述。
例如,参见图3h,条件2.1为战力BETWEEN20-10000;条件2.2为等级BETWEEN 5-50,对应查询信息为:
可选的,在实际实现中,为了简化交互操作,并实现更好的操作数取值类型判断,可以限制操作符号和操作数的选择。
例如,对IN操作符,可以限制第一个操作数必须为选取某个字段,第二个操作数必须为选取一个列表格式的具体值。又或者,限制AND/OR的嵌套层数为2,在第一层只能选择AND/OR操作符,第二层只能选择其他操作符。
304、基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
其中,每层列表的操作符和操作数按照列表嵌套的次序组合起来就得到了嵌套列表格式的查询信息。
305、向服务器发送所述嵌套列表格式的查询信息。
本实施例中,步骤305之后,还可以接收服务器发送的对应查询信息的查询结果,基于查询结果进行相应的处理如显示。
一个示例中为了便于用户确认查询信息是否为自己要的查询信息,在向服务器发送所述嵌套列表格式的查询信息前,还可以基于查询信息解析出终端显示所需的查询描述信息进行显示,查询描述信息用于描述查询信息中限定的筛选条件。
可选的,步骤“基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息”后,还可以包括:
分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果;
将列表中的操作符和操作数的解析结果,分别转换为终端显示所需的第二目标字符和文本信息,并基于列表的嵌套关系组合所述第二目标字符和文本信息,得到在终端显示的查询描述语句;
在所述终端显示所述查询描述语句。
其中,第二目标字符也可以为空,例如操作符col表示取出对应名称的列,转换而成的第二目标字符为空。
其中,操作符与第二目标字符的对应关系可以预先设置并存储,在将列表中的操作符转换为第二目标字符时,可以实际基于该预先设置的对应关系进行转换。
可选的,解析结果中可能出现的字符与文本信息的对应关系也可以预先设置并存储,在将解析结果转换为文本信息时可以基于该对应关系进行转换。
其中,步骤“分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果”,可以参考前述示例中关于查询信息的解析过程的描述,在此不再赘述。
其中,第二目标字符可以是预设语种的文字和/或数学符号,例如中文以及数学符号。
可选的,步骤“将列表中的操作符和操作数的解析结果,分别转换为终端显示所需的第二目标字符和文本信息,并基于列表的嵌套关系组合所述第二目标字符和文本信息,得到在终端显示的查询描述语句”,可以包括:
选择查询信息的列表中最内层列表外嵌的列表作为当前转换列表,将当前转换列表的操作符和操作数分别转换为第二目标字符和对应的文本信息,将该第二目标字符和文本信息进行组合得到组合后信息;
将组合后信息作为所述当前转换列表外嵌的列表中操作数对应的文本信息,将所述当前转换列表外嵌的列表作为新的当前转换列表,返回执行所述将当前转换列表的操作符和操作数分别转换为第二目标字符和对应的文本信息,将该第二目标字符和文本信息进行组合得到组合后信息的步骤,直到将最外层列表中的操作符和操作数分别转换为第二目标字符和对应的文本信息,将该第二目标字符和文本信息进行组合得到组合后信息为止;
将所述查询信息的最外层列表对应的组合后信息,确定为在终端显示的查询描述语句。
其中,返回执行所述将当前转换列表的操作符和操作数分别转换为第二目标字符和对应的文本信息,将该第二目标字符和文本信息进行组合得到组合后信息的步骤时,若当前转换列表中的操作数已经全部具有对应的文本信息,则可以不进行操作数到文本信息的转换。
例如,还是以前述查询语句为例,介绍本实施例的查询描述信息的生成方式。
其中,查询信息为[
'and',
['gt',['col','p1.force'],['val',1000]],
['gt',['col','p1.force'],['*',['col','p1.level'],['val',10]]],
]
描述语句生成过程示例
代码实现:
bin_op_map={
'*':'*',
'gt':'>',
}
#定义列的中文名
translate={
'p1.force':'基础属性/战力',
'p1.level':'基础属性/等级',
}
defparse_to_text(data):
"""描述语句生成简化版实现示例"""
#检查操作符
op=data.pop(0)
#非递归操作符-取原始数据
ifop=='val':
returnrepr(data[0])
#非递归操作符-指定列
if op=='col':
#翻译列名为中文名
return translate[data[0]]
#递归操作符
#递归地解析所有子操作数
args=[parse_to_text(item)for item in data]
#将所有子操作数的解析结果根据操作符进行合并
if op in bin_op_map:
#合并二元操作符
return"%s%s%s"%(args[0],bin_op_map[op],args[1])
if op=='and':
#合并and
return"且".join(args)
if op=='or':
#合并or
return"或".join(args)
raiseValueError("未知操作%s"%op)
实际解析过程:
/>
/>
其中,可以将上述查询描述语句显示在对应的页面中,便于用户确认自己选择的查询结果的条件是否符合心意。
采用本实施例的方法,可以基于第一设置指令和第二设置指令,生成嵌套列表格式的查询信息发送给服务器以进行查询,该查询信息包括至少两层嵌套的列表,每层列表包括操作符以及操作符对应的至少一个操作数,操作符表示对对应的操作数执行的操作,由于本实施例的查询信息是基于嵌套列表的结构生成的、由不同层的列表嵌套而成的查询信息,所以基于列表的嵌套可以支持将复杂筛选条件拆分到不同层的列表中进行表达,从而了支持对复杂筛选条件的表达,并且采用本实施例有效避免了采用SQL字符串带来的SQL注入问题。
为了更好地实施以上方法,相应的,本发明实施例还提供一种数据查询装置。参考图4,该数据查询装置包括:
接收单元401,用于接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
嵌套解析单元402,用于分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;
查询语句生成单元403,用于基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
查询单元404,用于基于所述目标查询语句进行查询,得到查询结果。
在一个可选的示例中,嵌套解析单元,用于:
若所述查询信息的最外层列表中的操作符是预设的递归操作符,确定所述最外层列表中的各操作数为内嵌的列表;
从未解析的所述列表中选择当前解析列表;
若所述当前解析列表中的操作符是预设的递归操作符,确定所述当前解析列表中的各操作数为新的内嵌的列表,返回执行所述从未解析的所述列表中选择当前解析列表的步骤;
若所述当前解析列表中的操作符不是预设的递归操作符,则确定所述当前解析列表中的操作数不是内嵌的列表,对所述当前解析列表中的操作数进行解析,得到所述操作数的解析结果,返回执行所述从未解析的所述列表中选择当前解析列表的步骤,直到所有层的列表解析完成。
在一个可选的示例中,查询语句生成单元,用于基于相同列表中操作符指示的对操作数执行的操作,以及所述操作数的解析结果,对相同列表中的操作数的解析结果按照预设格式的查询语句所需的形式进行合并,得到预设格式的目标查询语句。
在一个可选的示例中,查询语句生成单元,用于:
选择所述列表中最内层列表外嵌的列表作为当前合并列表,基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进合并得到新的解析结果;
将新的解析结果作为所述当前合并列表外嵌的列表中操作数的解析结果,将所述当前合并列表外嵌的列表作为新的当前合并列表,返回执行所述基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进行合并得到新的解析结果的步骤,直到对最外层列表中操作数的解析结果进行合并得到新的解析结果为止;
将所述查询信息的最外层列表对应的新的解析结果,确定为目标查询语句。
在一个可选的示例中,查询语句生成单元,用于将当前合并列表中的操作符转换为预设格式的查询语句中表示相同操作的第一目标字符,以所述第一目标字符连接所述当前合并列表中操作数对应的解析结果,得到新的解析结果。
在一个可选的示例中,装置还包括权限检查单元,用于:
若列表中的操作符对应的操作数指示待查询的目标字段,从所述操作符的操作数中获取所述待查询的目标字段;
确定所述终端是否具有所述目标字段的查询权限,若否,则中断所述查询信息的查询过程,以避免执行所述基于所述目标查询语句进行查询,得到查询结果的步骤。
在一个可选的示例中,所述查询信息为json格式或map格式的信息,接收单元用于:通过HTTP接口接收终端发送的嵌套列表格式的查询信息。
本发明实施例提供了一种数据查询装置,该装置使用的查询信息为嵌套列表格式,查询信息包括至少两层嵌套的列表,每层列表包括操作符以及操作符对应的至少一个操作数,操作符表示对对应的操作数执行的操作,装置可以基于对查询信息的嵌套列表的解析和对解析结果的组合,得到预设格式的目标查询语句以进行查询,由于查询信息是基于嵌套列表的结构生成的、由不同层的列表嵌套而成的查询信息,所以基于列表的嵌套可以支持将复杂筛选条件拆分到不同层的列表中进行表达,从而了支持对复杂筛选条件的表达,并且采用本实施例有效避免了采用SQL字符串带来的SQL注入问题。
为了更好地实施以上方法,相应的,本发明实施例还提供一种数据查询装置。参考图5,该数据查询装置包括:
第一指令处理单元501,用于响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
第二指令处理单元502,用于若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
第三指令处理单元503,用于若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
确定单元504,用于基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
发送单元505,用于向服务器发送所述嵌套列表格式的查询信息。
在一个可选的示例中,装置还包括:第一生成单元和第二生成单元;
第一生成单元,用于在响应于针对待生成的查询信息的第一设置指令前,显示第一设置页面,所述第一设置页面用于设置查询信息的最外层列表中的操作符以及操作数数量;响应于针对第一设置页面的第一设置操作,获取最外层列表的操作符和操作数数量,基于所述操作符和操作数数量生成第一设置指令;
第二生成单元,用于在接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数前,响应于针对第一设置页面的操作数选择操作,显示被选择的操作数对应的待填充列表的第二设置页面;响应于针对第二设置页面的第二设置操作,获取所述待填充列表中的操作符和操作数数量,基于所述操作符和操作数数量生成第二设置指令。
在一个可选的示例中,装置还包括前端显示单元,用于:
在基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息后,分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果;
将列表中的操作符和操作数的解析结果,分别转换为终端显示所需的第二目标字符和文本信息,并基于列表的嵌套关系组合所述第二目标字符和文本信息,得到在终端显示的查询描述语句;
在所述终端显示所述查询描述语句。
本发明实施例提供了一种数据查询装置,可以基于第一设置指令和第二设置指令,生成嵌套列表格式的查询信息发送给服务器以进行查询,该查询信息包括至少两层嵌套的列表,每层列表包括操作符以及操作符对应的至少一个操作数,操作符表示对对应的操作数执行的操作,由于本实施例的查询信息是基于嵌套列表的结构生成的、由不同层的列表嵌套而成的查询信息,所以基于列表的嵌套可以支持将复杂筛选条件拆分到不同层的列表中进行表达,从而了支持对复杂筛选条件的表达,并且采用本实施例有效避免了采用SQL字符串带来的SQL注入问题。
此外,本申请实施例还提供一种电子设备,该电子设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,PersonalComputer)、个人数字助理(Personal Digital Assistant,PDA)等终端设备。如图6所示,图6为本申请实施例提供的电子设备的结构示意图。该电子设备1000包括有一个或者一个以上处理核心的处理器601、有一个或一个以上计算机可读存储介质的存储器602及存储在存储器602上并可在处理器上运行的计算机程序。其中,处理器601与存储器602电性连接。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器601是电子设备1000的控制中心,利用各种接口和线路连接整个电子设备1000的各个部分,通过运行或加载存储在存储器602内的软件程序和/或模块,以及调用存储在存储器602内的数据,执行电子设备1000的各种功能和处理数据,从而对电子设备1000进行整体监控。
在本申请实施例中,电子设备1000中的处理器601会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器602中,并由处理器601来运行存储在存储器602中的应用程序,从而实现各种功能:
接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;
基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
基于所述目标查询语句进行查询,得到查询结果。
或者;
响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
向服务器发送所述嵌套列表格式的查询信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图6所示,电子设备1000还包括:触控显示屏603、射频电路604、音频电路605、输入单元606以及电源607。其中,处理器601分别与触控显示屏603、射频电路604、音频电路605、输入单元606以及电源607电性连接。本领域技术人员可以理解,图6中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏603可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏603可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器601,并能接收处理器601发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器601以确定触摸事件的类型,随后处理器601根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏603而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏603也可以作为输入单元606的一部分实现输入功能。
在本申请实施例中,通过处理器601在触控显示屏603上生成用户界面,用户可以在该用户界面上进行操作,进行待检索的目标文本的输入。
射频电路604可用于收发射频信号,以通过无线通信与网络设备或其他电子设备建立无线通讯,与网络设备或其他电子设备之间收发信号。
音频电路605可以用于通过扬声器、传声器提供用户与电子设备之间的音频接口。音频电路605可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路605接收后转换为音频数据,再将音频数据输出处理器601处理后,经射频电路604以发送给比如另一电子设备,或者将音频数据输出至存储器602以便进一步处理。音频电路605还可能包括耳塞插孔,以提供外设耳机与电子设备的通信。
输入单元606可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源607用于给电子设备1000的各个部件供电。可选的,电源607可以通过电源管理系统与处理器601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源607还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图6中未示出,电子设备1000还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种数据查询方法中的步骤。例如,该计算机程序可以执行如下步骤:
接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果,其中,至少一层列表的操作数中包括待查询的目标字段;
基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
基于所述目标查询语句进行查询,得到查询结果。
或者;
响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
向服务器发送所述嵌套列表格式的查询信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种数据查询方法中的步骤,因此,可以实现本申请实施例所提供的任一种数据查询方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种数据查询方法、装置、计算机可读存储介质及电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

Claims (12)

1.一种数据查询方法,其特征在于,包括:
接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的至少一个操作数,所述操作符表示对对应的操作数执行的操作;
若所述查询信息的最外层列表中的操作符是预设的递归操作符,确定所述最外层列表中的各操作数为内嵌的列表;
从未解析的所述列表中选择当前解析列表;
若所述当前解析列表中的操作符是预设的递归操作符,确定所述当前解析列表中的各操作数为新的内嵌的列表,返回执行所述从未解析的所述列表中选择当前解析列表的步骤;
若所述当前解析列表中的操作符不是预设的递归操作符,则确定所述当前解析列表中的操作数不是内嵌的列表,对所述当前解析列表中的操作数进行解析,得到所述操作数的解析结果,返回执行所述从未解析的所述列表中选择当前解析列表的步骤,直到所有层的列表解析完成;
基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
基于所述目标查询语句进行查询,得到查询结果;
其中,对当前解析列表进行分析时,将所述当前解析列表中的操作符与预设特定操作符进行匹配,若匹配成功,则从所述操作符的操作数中获取待查询的目标字段;
确定所述终端是否具有所述目标字段的查询权限,若否,则中断所述查询信息的查询过程,以避免执行所述基于所述目标查询语句进行查询,得到查询结果的步骤。
2.根据权利要求1所述的数据查询方法,其特征在于,所述基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句,包括:
基于相同列表中操作符指示的对操作数执行的操作,以及所述操作数的解析结果,对相同列表中的操作数的解析结果按照预设格式的查询语句所需的形式进行合并,得到预设格式的目标查询语句。
3.根据权利要求2所述的数据查询方法,其特征在于,所述基于相同列表中操作符指示的对操作数执行的操作,以及所述操作数的解析结果,对相同列表中的操作数的解析结果按照预设格式的查询语句所需的形式进行合并,得到预设格式的目标查询语句,包括:
选择所述列表中最内层列表外嵌的列表作为当前合并列表,基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进合并得到新的解析结果;
将新的解析结果作为所述当前合并列表外嵌的列表中操作数的解析结果,将所述当前合并列表外嵌的列表作为新的当前合并列表,返回执行所述基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进行合并得到新的解析结果的步骤,直到对最外层列表中操作数的解析结果进行合并得到新的解析结果为止;
将所述查询信息的最外层列表对应的新的解析结果,确定为目标查询语句。
4.根据权利要求3所述的数据查询方法,其特征在于,所述基于所述当前合并列表的操作符以及操作数的解析结果,对所述当前合并列表中操作数的解析结果按照预设格式的查询语句所需的形式进合并得到新的解析结果,包括:
将当前合并列表中的操作符转换为预设格式的查询语句中表示相同操作的第一目标字符,以所述第一目标字符连接所述当前合并列表中操作数对应的解析结果,得到新的解析结果。
5.根据权利要求1-4任一项所述的数据查询方法,其特征在于,所述查询信息为json格式或map格式的信息,所述接收终端发送的嵌套列表格式的查询信息,包括:
通过HTTP接口接收终端发送的嵌套列表格式的查询信息。
6.一种数据查询方法,其特征在于,包括:
响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
向服务器发送所述嵌套列表格式的查询信息。
7.根据权利要求6所述的数据查询方法,其特征在于,所述响应于针对待生成的查询信息的第一设置指令前,包括:
显示第一设置页面,所述第一设置页面用于设置查询信息的最外层列表中的操作符以及操作数数量;
响应于针对第一设置页面的第一设置操作,获取最外层列表的操作符和操作数数量,基于所述操作符和操作数数量生成第一设置指令;
所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数前,包括:
响应于针对第一设置页面的操作数选择操作,显示被选择的操作数对应的待填充列表的第二设置页面;
响应于针对第二设置页面的第二设置操作,获取所述待填充列表中的操作符和操作数数量,基于所述操作符和操作数数量生成第二设置指令。
8.根据权利要求6所述的数据查询方法,其特征在于,所述基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息后,还包括:
分析所述查询信息中的每一层列表,基于每一层列表中的操作符对所述操作符对应的操作数进行解析,得到所述操作数的解析结果;
将列表中的操作符和操作数的解析结果,分别转换为终端显示所需的第二目标字符和文本信息,并基于列表的嵌套关系组合所述第二目标字符和文本信息,得到在终端显示的查询描述语句;
在所述终端显示所述查询描述语句。
9.一种数据查询装置,其特征在于,包括:
接收单元,用于接收终端发送的嵌套列表格式的查询信息,其中,所述查询信息包括至少两层嵌套的列表,每层列表包括操作符和操作符对应的操作数,至少一层列表的操作数中包括待查询的目标字段,所述操作数和/或操作符和查询条件;
嵌套解析单元,用于若所述查询信息的最外层列表中的操作符是预设的递归操作符,确定所述最外层列表中的各操作数为内嵌的列表;从未解析的所述列表中选择当前解析列表;若所述当前解析列表中的操作符是预设的递归操作符,确定所述当前解析列表中的各操作数为新的内嵌的列表,返回执行所述从未解析的所述列表中选择当前解析列表的步骤;若所述当前解析列表中的操作符不是预设的递归操作符,则确定所述当前解析列表中的操作数不是内嵌的列表,对所述当前解析列表中的操作数进行解析,得到所述操作数的解析结果,返回执行所述从未解析的所述列表中选择当前解析列表的步骤,直到所有层的列表解析完成;
查询语句生成单元,用于基于所述列表中的操作符和操作数的解析结果,生成预设格式的目标查询语句;
查询单元,用于基于所述目标查询语句进行查询,得到查询结果;
以及,权限检查单元,用于在所述嵌套解析单元对当前解析列表进行分析时,将所述当前解析列表中的操作符与预设特定操作符进行匹配,若匹配成功,则从所述操作符的操作数中获取待查询的目标字段;确定所述终端是否具有所述目标字段的查询权限,若否,则中断所述查询信息的查询过程,以避免执行所述基于所述目标查询语句进行查询,得到查询结果的步骤。
10.一种数据查询装置,其特征在于,包括:
第一指令处理单元,用于响应于针对待生成的查询信息的第一设置指令,基于所述第一设置指令获取所述待生成的查询信息中最外层列表的操作符,以及确定所述操作符对应的操作数,其中,所述最外层列表中的所述操作数为待填充列表;
第二指令处理单元,用于若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数;
第三指令处理单元,用于若所述待填充列表中的操作符为预设的递归操作符,则所述待填充列表中的操作符对应的操作数为新的待填充列表,返回执行所述若接收到针对所述待填充列表的第二设置指令,确定所述待填充列表中的操作符以及操作数的步骤,直到所述查询信息的最内层列表中的操作数不是待填充列表为止;
确定单元,用于基于每层列表的操作符和操作数以及每层列表的嵌套关系得到嵌套列表格式的查询信息;
发送单元,用于向服务器发送所述嵌套列表格式的查询信息。
11.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如权利要求1-8任一项所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1-8任一项所述方法的步骤。
CN202110904413.2A 2021-08-06 2021-08-06 一种数据查询方法、装置、电子设备和存储介质 Active CN113609154B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110904413.2A CN113609154B (zh) 2021-08-06 2021-08-06 一种数据查询方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110904413.2A CN113609154B (zh) 2021-08-06 2021-08-06 一种数据查询方法、装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN113609154A CN113609154A (zh) 2021-11-05
CN113609154B true CN113609154B (zh) 2023-08-29

Family

ID=78339806

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110904413.2A Active CN113609154B (zh) 2021-08-06 2021-08-06 一种数据查询方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN113609154B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114969131B (zh) * 2022-08-02 2022-10-21 昆仑智汇数据科技(北京)有限公司 一种信息的查询方法、装置及设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109656950A (zh) * 2018-12-12 2019-04-19 上海达梦数据库有限公司 递归查询方法、装置、服务器及存储介质
CN110399125A (zh) * 2019-07-25 2019-11-01 南京数睿数据科技有限公司 一种基于Java技术的多维度多条件的动态查询方法
CN110866028A (zh) * 2019-10-10 2020-03-06 微梦创科网络科技(中国)有限公司 一种sql指令生成方法及系统
CN111460506A (zh) * 2020-04-03 2020-07-28 中国工商银行股份有限公司 数据访问控制方法及装置
WO2020177073A1 (zh) * 2019-03-05 2020-09-10 深圳市天软科技开发有限公司 获取数据集的方法、终端设备及计算机可读存储介质
CN112035510A (zh) * 2020-08-28 2020-12-04 中电长城(长沙)信息技术有限公司 一种信息系统复杂数据查询方法及系统
CN112286958A (zh) * 2020-11-16 2021-01-29 广州速威智能系统科技有限公司 数据库查询表达式的处理方法和系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9519774B2 (en) * 2014-01-20 2016-12-13 Prevoty, Inc. Systems and methods for SQL query constraint solving
CN112069201A (zh) * 2020-09-04 2020-12-11 北京百度网讯科技有限公司 目标数据的获取方法和装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109656950A (zh) * 2018-12-12 2019-04-19 上海达梦数据库有限公司 递归查询方法、装置、服务器及存储介质
WO2020177073A1 (zh) * 2019-03-05 2020-09-10 深圳市天软科技开发有限公司 获取数据集的方法、终端设备及计算机可读存储介质
CN110399125A (zh) * 2019-07-25 2019-11-01 南京数睿数据科技有限公司 一种基于Java技术的多维度多条件的动态查询方法
CN110866028A (zh) * 2019-10-10 2020-03-06 微梦创科网络科技(中国)有限公司 一种sql指令生成方法及系统
CN111460506A (zh) * 2020-04-03 2020-07-28 中国工商银行股份有限公司 数据访问控制方法及装置
CN112035510A (zh) * 2020-08-28 2020-12-04 中电长城(长沙)信息技术有限公司 一种信息系统复杂数据查询方法及系统
CN112286958A (zh) * 2020-11-16 2021-01-29 广州速威智能系统科技有限公司 数据库查询表达式的处理方法和系统

Also Published As

Publication number Publication date
CN113609154A (zh) 2021-11-05

Similar Documents

Publication Publication Date Title
KR102563314B1 (ko) 전자 장치 및 단축 명령어의 바로가기 생성 방법
US9842102B2 (en) Automatic ontology generation for natural-language processing applications
CN103678704A (zh) 一种基于图片信息的识图方法、系统、设备及装置
US20220027575A1 (en) Method of predicting emotional style of dialogue, electronic device, and storage medium
CN113609154B (zh) 一种数据查询方法、装置、电子设备和存储介质
CN113626017B (zh) 异构程序的分析方法、装置、计算机设备和存储介质
CN116360735A (zh) 一种表单生成方法、装置、设备和介质
CN112817582B (zh) 代码处理方法、装置、计算机设备和存储介质
WO2022040547A1 (en) Techniques for providing explanations for text classification
US20230139397A1 (en) Deep learning techniques for extraction of embedded data from documents
US11838294B2 (en) Method for identifying user, storage medium, and electronic device
CN115827437A (zh) 静态代码分析方法和装置、电子设备、可读存储介质和芯片
US11966562B2 (en) Generating natural languages interface from graphic user interfaces
CN113704273A (zh) 数据管理方法、装置、存储介质及服务器
CN115686506A (zh) 一种数据显示方法、装置、电子设备和存储介质
CN113900895B (zh) 信息处理方法、信息处理装置、存储介质与电子设备
US20240028963A1 (en) Methods and systems for augmentation and feature cache
CN114116683B (zh) 计算平台的多语法处理方法、设备及可读存储介质
US20230134149A1 (en) Rule-based techniques for extraction of question and answer pairs from data
CN115858652A (zh) 一种数据转换方法、装置、计算机设备及存储介质
CN112988406B (zh) 远程调用方法、装置和存储介质
CN113360054A (zh) 评论信息显示方法、装置及存储介质
CN116186333A (zh) 用户事件索引方法、装置、电子设备和存储介质
CN115129730A (zh) 流量数据标识方法、装置、存储介质及计算机设备
CN116028442A (zh) 用于资源依赖解析的元信息生成方法、装置和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant