jxORM提供了丰富的数据查询功能。在jxORM中,有两种数据查询方式:

  • 通过数据类执行查询
  • 直接使用SQL的select语句查询

数据类查询

数据类查询的优势:

  • 可以根据数据类的定义,自动完成查询条件中的条件值和查询到的数据的类型转换
  • 直接获取到数据对象,如果有修改可以直接update到数据库中
  • 最大优势就是可以通过数据类间的继承,提供可靠的数据扩展能力。

数据类查询的核心函数是:searchBy类函数。其函数签名为:

@classmethod
searchBy(cls, db, expression, offset:int=0, limit:int=100)

使用示例:

#查询test用户的数据
users = User.searchBy(db, "Name == 'test' & age > 18")

查询表达式expression是一个字符串,用于指定查询条件。查询条件的语法如下:

字段名1 比较运算符1 值1 & 字段名2 比较运算符2 值2 & ...
# & 符合代表的是条件表达式之间是与连接【AND】

其中,字段名是数据类中定义的字段名,比较运算符是以下之一:

==:等于
>:大于
<:小于
>=:大于等于
<=:小于等于
<>:不等于
like:字符串模糊查询

注1:比较运算符两边必须有空格,否则会报错

注2:字段名如果不是本类的属性则忽略相应的查询条件

searchBy的执行结果是一个list,其中的元素是dict,每个dict对应一条符合查询条件的User数据。

注:如果数据类是继承自其他数据类,则查询结果会自动合并所继承的所有父表中的数据。

事务中查询

jxORM的所有操作都是在事务中进行的,查询也不例外。

只是,数据查询只不需要考虑事务的提交与回滚,只将db作为数据库连接使用而已;而insert、update等需要修改数据库中内容的操作就必须在归还db时提交事务。

读取唯一性结果

searchBy返回的是一个list。如果我们明确知道结果只有一条,则可以使用get类函数来直接获取到dict型的结果,即searchBy(…)[0]。

@classmethod
getBy(cls, db, expression)

当然,唯一性结果中返回dict数据意义不大,重要的是返回数据所对应的该数据类型的数据对象,这才是ORM的意义所在。

#根据条件获取数据对象,可以修改后直接update到数据库中
@classmethod
Get(cls, db, expression)#还有比较常用的在数据库事务中获取数据对象的两个类函数
#根据ID获取数据对象
@classmethod
GetByID(cls, db, id)#根据Name获取数据对象
@classmethod
GetByName(cls, db, name)

注1:GetByName是根据【Name == name】来查询的【Name,第一个字母大写】,如果该数据类中没有定义Name字段,则可能会出现逻辑错误【相当于未设置查询条件来查询所有行,既有可能返回多条数据从而触发多行异常,也有可能在只有一条数据时工作正常】

注2:get类函数如果查询结果为零行则返回None,如果超过一行则掷出异常

sql语句直接查询

对于比较复杂的数据库查询,可以直接使用sql语句来查询数据:

from jxORM import select
#其签名为:
select(db, sql, need_trans=True)

查询结果是一个list,其中的元素是dict,每个dict对应一条符合查询条件的结果数据。

注1:只支持select查询语句,不支持插入、修改、删除操作

注2:需要开发者根据数据表中的字段类型来完成查询条件中的数据的类型转换,典型的如使用int类型来代表bool,则【Noused == False】,应写做:Noused=0

select函数会尽可能的识别查询语句中FROM子句中的数据表名,以及SELECT子句中的字段名,然后将识别到的字段名和识别到的数据类中的字段名进行匹配,如果匹配成功则自动用匹配到的字段的数据类型进行转换。

如果SELECT子句使用了别名等无法满足上述匹配条件,则设置need_trans=False来取消自动转换,以避免混乱。

启用自动转换的好处是如果数据库中的数据类型和python中的数据类型不一致,jxORM会自动将数据库中的数据类型转换为python中的数据类型。否则就需要用户自行转换。

如,我们一般用整数来代表bool,那么不转换的话我们得到的就是1或0,而转换的话则会得到True或False。

或者我们为了节省存储空间,在sqlite中用Integer来代表日期时间数据类型,那么不转换的话我们得到的就是一个整数,而转换的话则会得到一个datetime对象。

注:对于sqlite这样的数据库,need_trans=False导致读取到的行数据不再是【dict】,而是只包含列值的【tuple】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90568.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90568.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90568.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解力扣高频SQL50题之1084. 销售分析 III【简单】

传送门&#xff1a;1084. 销售分析 III 题目 表&#xff1a; Product --------------------- | Column Name | Type | --------------------- | product_id | int | | product_name | varchar | | unit_price | int | --------------------- product_id 是该表的主键&#x…

Kafka入门指南:从零开始掌握分布式消息队列

为什么要有消息队列 生活中有这样的场景快递员将包裹送给买家。 我记得在小时候&#xff0c;收快递是需要快递员电话联系上门时间的。这非常不方便&#xff0c;一方面快递员手中可能有多个包裹&#xff0c;另一方面买家可能在上班时间抽不出身。 后来有了驿站&#xff0c;快递员…

基于Matlab图像处理的瓶子自动检测与质量评估系统

本文提出了一种基于图像处理的瓶子缺陷检测系统&#xff0c;旨在通过图像分析自动识别和检测瓶子在生产过程中可能出现的缺陷。系统首先通过图像预处理技术&#xff0c;包括灰度转换、二值化处理、噪声去除等步骤&#xff0c;将原始图像转换为适合分析的格式。然后&#xff0c;…

【Pandas】pandas Index objects Index.name

Pandas2.2 Index objects Properties方法描述Index.values返回 Index 对象的值&#xff0c;通常是一个 NumPy 数组Index.is_monotonic_increasing用于检查索引的元素是否 单调递增Index.is_monotonic_decreasing用于判断索引的值是否 单调递减Index.is_unique用于检查索引中的标…

JDBC教程,2025版最新讲解.超详细入门教程

以下内容全面详尽地梳理了 JDBC &#xff08;Java Database Connectivity&#xff09;的核心知识点&#xff0c;并在关键环节配以示例代码。若要快速定位&#xff0c;可先查看下方结构&#xff1a; JDBC 概览驱动加载与注册获取数据库连接执行 SQL&#xff08;Statement、Prepa…

PyTorch中nn.Module详解和综合代码示例

在 PyTorch 中&#xff0c;nn.Module 是神经网络中最核心的基类&#xff0c;用于构建所有模型。理解并熟练使用 nn.Module 是掌握 PyTorch 的关键。一、什么是 nn.Module nn.Module 是 PyTorch 中所有神经网络模块的基类。可以把它看作是“神经网络的容器”&#xff0c;它封装了…

深入解析三大Web安全威胁:文件上传漏洞、SQL注入漏洞与WebShell

文章目录文件上传漏洞SQL注入漏洞WebShell三者的核心关联&#xff1a;攻击链闭环文件上传漏洞 文件上传漏洞&#xff08;File Upload Vulnerability&#xff09; 当Web应用允许用户上传文件但未实施充分的安全验证时&#xff0c;攻击者可上传恶意文件&#xff08;如WebShell、…

【对比】群体智能优化算法 vs 贝叶斯优化

在机器学习、工程优化和科学计算中&#xff0c;优化算法的选择直接影响问题求解的效率与效果。群体智能优化算法&#xff08;Swarm Intelligence, SI&#xff09;和贝叶斯优化&#xff08;Bayesian Optimization, BO&#xff09;是两种截然不同的优化范式&#xff0c;分别以不同…

LLMs之Agent:ChatGPT Agent发布—统一代理系统将研究与行动无缝对接,开启智能助理新时代

LLMs之Agent&#xff1a;ChatGPT Agent发布—统一代理系统将研究与行动无缝对接&#xff0c;开启智能助理新时代 目录 OpenAI重磅发布ChatGPT Agent—统一代理系统将研究与行动无缝对接&#xff0c;开启智能助理新时代 第一部分&#xff1a;Operator 和深度研究的自然演进 第…

Linux726 raid0,raid1,raid5;raid 创建、保存、停止、删除

RAID创建 创建raid0 安装mdadm yum install mdadm mdadm --create /dev/md0 --raid-devices2 /dev/sdb5 /dev/sdb6 [rootsamba caozx26]# mdadm --create /dev/md0 --raid-devices2 /dev/sdb3 /dev/sdb5 --level0 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev…

深入剖析 MetaGPT 中的提示词工程:WriteCode 动作的提示词设计

今天&#xff0c;我想和大家分享关于 AI 提示词工程的文章。提示词&#xff08;Prompt&#xff09;是大型语言模型&#xff08;LLM&#xff09;生成高质量输出的关键&#xff0c;而在像 MetaGPT 这样的 AI 驱动软件开发框架中&#xff0c;提示词的设计直接决定了代码生成的可靠…

关于 ESXi 中 “ExcelnstalledOnly 已禁用“ 的解决方案

第一步&#xff1a;使用ssh登录esxi esxcli system settings advanced list -o /User/execInstalledOnly可能会得到以下内容 esxcli system settings advanced list -o /User/execInstalledOnlyPath: /User/ExecInstalledOnlyType: integerInt Value: 0Default Int Value: 1Min…

HTML5 Canvas 绘制圆弧效果

HTML5 Canvas 绘制圆弧效果 以下是一个使用HTML5 Canvas绘制圆弧的完整示例&#xff0c;你可以直接在浏览器中运行看到效果&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"view…

智能Agent场景实战指南 Day 18:Agent决策树与规划能力

【智能Agent场景实战指南 Day 18】Agent决策树与规划能力 开篇 欢迎来到"智能Agent场景实战指南"系列的第18天&#xff01;今天我们将深入探讨智能Agent的核心能力之一&#xff1a;决策树与规划能力。在现代业务场景中&#xff0c;Agent需要具备类似人类的决策能力…

AI 编程工具 Trae 重要的升级。。。

大家好&#xff0c;我是樱木。 今天打开 Trae &#xff0c;已经看到它进行图标升级&#xff0c;之前的图标&#xff0c;国际和国内版本长得非常像&#xff0c;现在做了很明显的区分&#xff0c;这点给 Trae 团队点个赞。 自从 Claude 使出了压力以来&#xff0c;Cursor 锁区&…

排序算法,咕咕咕

1.选择排序void selectsort(vector<int>& v) { for(int i0;i<v.size()-1;i) {int minii;for(int ji1;j<v.size();j){if(v[i]>v[j]){minij;}}if(mini!i)swap(v[i],v[mini]); } }2.堆排序void adjustdown(vector<int>& v,int root,int size) { int …

数据库查询系统——pyqt+python实现Excel内查课

一、引言 数据库查询系统处处存在&#xff0c;在教育信息化背景下&#xff0c;数据库查询技术更已深度融入教务管理场景。本系统采用轻量化架构&#xff0c;结合Excel课表&#xff0c;通过PythonPyQt5实现跨平台桌面应用&#xff0c;以实现简单查课效果。 二、GUI界面设计 使用…

base64魔改算法 | jsvmp日志分析并还原

前言 上一篇我们讲了标准 base64 算法还原&#xff0c;为了进一步学习 base64 算法特点&#xff0c;本文将结合 jsvmp 日志&#xff0c;实战还原出 base64 魔改算法。 为了方便大家学习&#xff0c;我将入参和上篇文章一样&#xff0c;入参为 Hello, World!。 插桩 在js代码中&…

vue3笔记(2)自用

目录 一、作用域插槽 二、pinia的使用 一、Pinia 基本概念与用法 1. 安装与初始化 2. 创建 Store 3. 在组件中使用 Store 4. 高级用法 5、storeToRefs 二、Pinia 与 Vuex 的主要区别 三、为什么选择 Pinia&#xff1f; 三、定义全局指令 1.封装通用 DOM 操作&#…

大模型面试回答,介绍项目

1. 模型准备与转换&#xff08;PC端/服务器&#xff09;你先在PC上下载或训练好大语言模型&#xff08;如HuggingFace格式&#xff09;。用RKLLM-Toolkit把模型转换成瑞芯微NPU能用的专用格式&#xff08;.rkllm&#xff09;&#xff0c;并可选择量化优化。把转换好的模型文件拷…