jxORM--查詢數據

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;并可選擇量化優化。把轉換好的模型文件拷…