首页 > 数据库 >mORMot 1.18 第23章 使用纯SQL

mORMot 1.18 第23章 使用纯SQL

时间:2024-05-03 15:23:43浏览次数:21  
标签:end SQL 1.18 mORMot props local email

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格式。在实际应用中,确保正确处理异常和错误情况,以保证代码的健壮性和稳定性。

标签:end,SQL,1.18,mORMot,props,local,email
From: https://www.cnblogs.com/hieroly/p/18164510

相关文章

  • Mysql中的DQL语句
    1.基本语法SELECTcolumn1,column2,...FROMtable_name[WHEREcondition][ORDERBYcolumn_name[ASC|DESC]][LIMITnumber];*ORDERBYcolumn_name[ASC|DESC]是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。*LIMITnumber是一个可选的子句,用于限制......
  • OpenMLDB v0.9.0 发布:SQL 能力大升级覆盖特征上线全流程
    发布日期25April2024Releasenotehttps://github.com/4paradigm/OpenMLDB/releases/tag/v0.9.0亮点特性增加最新版SQLAlchemy2的支持,无缝集成Pandas和Numpy等常用Python框架。支持更多数据后端,融合TiDB的分布式文件存储能力以及OpenMLDB内存高性能特征计算......
  • mORMot 1.18 第19章 安全性
    mORMot1.18第19章安全性第19章安全性在企业数据库设计中,安全性是必不可少的。mORMot已为此做好准备。19.1HTTP/HTTPS您可以在四个受支持的模式中的任何一个中进行选择,它们可以组合使用。Pascal类描述TSQLRestServerAuthenticationDefaultmORMot安全认证,作为一......
  • mORMot 1.18 第18章 使用REST/JSON的客户端/服务器
    mORMot1.18第十八章使用REST/JSON的客户端/服务器JSON是一种被多种语言和众多领先公司接受的标准。正如我们在JSON章节中所解释的,它是标准化的,紧凑且解析速度快,同时当加入非关键性空格时,也易于人类阅读。这些事实使其成为数据交换最受欢迎的格式之一。JSON支持六种数据类型:......
  • mORMot 1.18 第13章 动态数组
    mORMot1.18第13章动态数组众所周知,数组是非常有用的。但在现实生活中,情况是不可预测的,数组的元素数量或大小可能会随着时间的推移而增长。有些语言,如PHP,就使得动态数组的使用变得很简单。在使用mORMot的Delphi中,我们使用类和方法来提供这一功能。首先,让我们声明一个典型的TS......
  • mysql 事务日志
    事务日志简介事务有四种特性:原子性、一致性、隔离性、持久性,详情请看《mysql事务的基础知识》。其中隔离性由锁机制实现,原子性、一致性由undo日志(undolog称为回滚日志,回滚记录到某个特定版本)来保证,持久性则是由redo日志(redolog称为重做日志,提供写操作,恢复提交事务修......
  • mysql 隔离级别为可重复读如何解决幻读
    MySQL中的可重复读(RepeatableRead,RR)隔离级别通过几种机制来解决幻读问题:1.**多版本并发控制(MVCC)**:在可重复读隔离级别下,MySQL使用MVCC来管理事务读取的数据版本。这意味着在事务开始时,系统会创建一个ReadView(读视图),该视图记录了当前所有活跃事务的ID。当执行SELECT查询时......
  • db.create_all() 报错上下文?flask_sqlalchemy创建数据库找不到上下文?
    问题报错:RuntimeError:Workingoutsideofapplicationcontext.Thistypicallymeansthatyouattemptedtousefunctionalitythatneededthecurrentapplication.Tosolvethis,setupanapplicationcontextwithapp.app_context().Seethedocumentationform......
  • MySQL8.4的安装与部署
    MySQL8.4的安装与部署下载wgethttps://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.0-1.el8.aarch64.rpm-bundle.tar安装清理mariadbrpm-qa|grepmaria|grep-vconnect|xargsrpm-e-f本地安装tar-xvfmysql-8.4.0-1.el8.aarch64.rpm-bundle.taryumlocali......
  • mysql安装教程
    1、先下载好mysql5.7版本的安装包,https://www.mysql.com/downloads/官网自己下载 2、这里选则windows 3、选择我们需要的版本  4、最后下载成功安装包就下载完毕了(官网下载可能较慢需要安装包的可以私信我) 一.mysql安装下载后双击安装包开始mysql5.7.33......