mORMot 1.18 第23章 使用纯SQL

mORMot 1.18 第23章 使用纯SQL

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

原文地址:https://www.cnblogs.com/hieroly/p/18164510