mORMot 1.18 第23章 使用純SQL

来源:https://www.cnblogs.com/hieroly/p/18164510
-Advertisement-
Play Games

在日常的企業經營和個人生活中,我們難免會遇到大量的增值稅發票,這些發票包括普票、專票、全電發票、捲票等各種形式,這些發票不僅記錄了我們的購買和銷售信息,還是我們報銷和審計的重要依據。然而,手動處理這些發票數據是一項繁瑣而耗時的工作。為瞭解決這個問題,現在有了一個非常方便的工具——增值稅發票識別 AP ...


mORMot 1.18 第23章 使用純SQL

有時你可能不想使用ORM,或者由於現有且不可更改的資料庫與ORM不相容而無法使用它。在這些情況下,你仍然可以依靠mORMot的其他功能,同時使用純SQL。

你可以發出純SQL命令並以JSON格式獲取數據。下麵的示例展示瞭如何使用快速且開源的Zeos資料庫庫與MariaDB/MySQL一起執行此操作。

請註意,如何在同一臺機器上的多個資料庫中對錶進行聯接是可能的。


program listpeople;

{$APPTYPE CONSOLE}

uses
  Windows, Messages, SysUtils, Variants, Classes,
  SynCommons, mORMot, mORMotSQLite3, mORMotDB,
  SynDB, SynDBSQLite3, SynDBDataSet, SynDBZeos,
  SynSQLite3, SynSQLite3Static, DateUtils;

procedure List(const aRawServerName, aDatabaseName, aUserID, aPassWord: RawUTF8);
var
  PropsClass: TSQLDBConnectionPropertiesClass;
  aServerName: RawUTF8;
  U, S: RawUTF8;
  props: TSQLDBConnectionProperties;
  i: integer;
begin
  PropsClass := TSQLDBZEOSConnectionProperties;
  aServerName := TSQLDBZEOSConnectionProperties.URI(dMySQL, aRawServerName);
  props := PropsClass.Create(aServerName, aDatabaseName, aUserID, aPassWord);
  try
    S := 'u.surname,u.givennames,u.departments, u.offices,u.phones,u.email, ' + 
         'u.homepage, p.employeeid, h.title ';
    U := props.Execute('SELECT ' + S + ' FROM ' + 
                       'import.users u LEFT JOIN ' +
                       'local.person p ON p.email = u.email ' +
                       'LEFT JOIN local.hr h ON p.nexus = h.userid ' +
                       ' WHERE surname LIKE ?',['engelke%']).FetchAllAsJSON(True);
    writeln(U);
  finally
    props.Free;
  end;
end;

begin
  try
    List('blah.erickengelke.com:3306', 'customers', 'userX', 'ChangeMe23');
  except
    on E: Exception do
      writeln('ERROR: ' + E.Message);
  end;
end.

你可以使用props.Execute(sql).FetchAllAsJSON來執行返回值的命令,或者使用props.ExecuteNoReturn(sql)當沒有預期結果時,例如:

Props.ExecuteNoReturn('DELETE * FROM users WHERE email like ?',['erick%']);

註意:在提供的代碼示例中,存在一些小錯誤和不一致之處,比如local.personlocal.hr可能不是有效的表名,它們僅用於示例目的。在實際應用中,需要替換為真實的資料庫表名。此外,SELECT語句中的字元串連接和欄位列表也需要根據實際的資料庫結構調整。代碼中的?占位符用於參數化查詢,以防止SQL註入攻擊,並且在實際執行時需要提供相應的參數值。

另外,請註意ExecuteNoReturn用於執行不返回結果的SQL語句,如DELETEUPDATEINSERT等。而Execute方法則用於執行返回結果的查詢,並通過FetchAllAsJSON方法將結果轉換為JSON格式。在實際應用中,確保正確處理異常和錯誤情況,以保證代碼的健壯性和穩定性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在.NET生態中,Serilog憑藉其強大的結構化日誌記錄功能和與Seq的無縫集成,已經成為許多開發者的首選日誌記錄工具。Seq作為一個日誌檢索和儀錶板工具,能夠將日誌中的插值轉換為結構化數據,極大地方便了開發者快速檢索日誌、定位問題併進行簡單的統計分析。這種便捷性讓人難以割捨。 背景 最近需 ...
  • PV 與 PVC PVC (PersistentVolumeClaim),命名空間(namespace)級別的資源,由 用戶 or StatefulSet 控制器(根據VolumeClaimTemplate) 創建。PVC 類似於 Pod,Pod 消耗 Node 資源,PVC 消耗 PV 資源。Po ...
  • C-08.索引的創建和設計原則 1.索引的聲明和使用 1.1 索引的分類 MySQL的索引包括普通索引、唯一性索引、全文索引、單列索引、多列索引和空間索引等。 從功能邏輯上分類,索引主要有4種,分別是普通索引,唯一索引,主鍵索引,全文索引。 按照物理實現方式,索引可以分為2種,聚簇索引和非聚簇索引。 ...
  • title: 深入 Django 模型層:資料庫設計與 ORM 實踐指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories: 後端開發 tags: Django ORM 模型設計 資料庫關係 性能優化 數據安全 查詢操作 模型 ...
  • orion-ops-pro —— 一款現代化、高顏值的一站式智能運維管理平臺,集資產管理、資產授權、批量執行、計劃任務、WebShell、WebSftp、角色管理、系統管理等功能於一體,致力於簡化運維團隊的治理工作。 ...
  • 本文源代碼:https://gitee.com/obullxl/PythonCS/tree/master/CS-CY2405 Python中*和**很常見 禪師在閱讀Python代碼過程中,經常看到一個函數或方法的入參是*args和**kwargs(如:def func(*args, **kwarg ...
  • 服務的提供者和消費者 服務之間可以通過Spring提供的RestTemplate來進行http請求去請求另一個Springboot的項目,這就叫做服務間的遠程調用。 當一個服務通過遠程調用去調用另一個服務時,被調用的服務就叫做服務的提供者,調用服務的服務就叫做服務的消費者。 一個服務可以既是服務的提 ...
  • 概述:拷貝並交換(Copy-and-Swap)是C++編程中的慣用法,用於實現賦值操作符和確保異常安全的拷貝構造函數。其核心思想是通過拷貝構造函數創建臨時副本,再通過交換確保操作的異常安全性。這種方法在C++11之前和之後都適用,但在C++11中,移動語義和右值引用的引入使得實現可以更加高效。 拷貝 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...