"SQL" (外部计算系统)

支持的数据库列表 »

更多信息

ExternalEvaluate 用法

  • ExternalEvaluate["SQL",code] 在数据库连接中执行 SQL 字符串并以 Wolfram 语言表达式的形式返回结果.
  • ExternalEvaluate["SQL"returntype,code] 执行 SQL 字符串并以指定 returntype 的形式返回结果. returntype 的可能规格包括 "Dataset""Rows""NamedRows""Columns""NamedColumns".
  • ExternalEvaluate[DatabaseReference[ref],code] 等价于 ExternalEvaluate[{"SQL","Evaluator"DatabaseReference[ref]},code].
  • ExternalEvaluate[{"SQL","Evaluator"target},]target 的可能设置包括:
  • "path"or File["path"]访问 SQLite 数据库的路径
    URL["url"]以形式 "backend://user:password@host:port/name" 指定的连接
    DatabaseReference[]SQL 数据库连接
    SQLConnection[]SQL-JDBC 数据库连接

数据类型

使用说明

  • 字符串模板 (<**>) 可用于计算并将 Wolfram 语言表达式插入 SQL 代码字符串.

范例

打开所有单元关闭所有单元

基本范例  (3)

为演示数据库指定一个参考信息:

在 SQL 中执行一条查询并返回结果:

若想要在外部语言单元格中使用 SQL,则需要注册一个默认数据库:

类型 > 并在下拉菜单中选择 SQL 可得到一个 SQL 代码单元格:

SELECT * FROM employees LIMIT 10

File 封装运行文件中的代码:

CloudDeploy 部署代码,从 CloudObject 直接运行代码:

URL 封装直接运行线上的代码:

范围  (20)

对于一个数据库连接并打开连接:

执行返回所有表格的查询:

使用 limit 查询特定表格:

使用 AS 语句对列重命名:

关闭会话:

默认情况下, ExternalEvaluate 使用 Dataset 返回数据:

"ReturnType" 可用于返回不同形式的数据:

使用 "Columns" 时,如果可能的话数字数据会以打包数组的形式呈现:

开启本地 PostgreSQL 数据库的会话(要执行这个输入,你需要有一个正常运行的 PostgreSQL 数据库实例):

在支持的情况下,ExternalEvaluate 会返回 Wolfram 语言表达式而非字符串:

会根据当前使用的数据库后端自动对参数进行规范化. 如果后端支持,可使用如 IntegerByteArrayStringDateObjectTimeObject 这样的表达式:

字符串模板可用于将 Wolfram 语言表达式插入 SQL 代码:

设置两个变量:

表达式 x^2+y^2 在 Wolfram 语言中计算,得到的结果在被转换后插入到 SQL 代码字符串中:

使用 Association 可手动向模板提供参数:

使用有名称的参数:

会话的选项  (8)

"ReturnType"  (3)

对于 SQL,默认的返回类型为 "Dataset"

"ReturnType" 可用于以不同形式返回数据:

无论是何种 "ReturnType",整数、实数和字符串等基本类型都会自动转换:

可用 connectionreturntype 作为指定 "ReturnType" 的便捷方法:

"Evaluator"  (1)

用指定的 "Evaluator" 运行 SQL 查询:

使用字符串或 File 封装时,将打开一个 SQLite 连接:

也可以用 URL 封装指定 "Evaluator"

相当于:

"SessionProlog"  (1)

"SessionProlog" 在会话开始时执行一些小操作:

"SessionEpilog"  (1)

"SessionEpilog" 在会话结束时执行一些小操作:

"Prolog"  (1)

"Prolog" 在每次计算开始前执行一些小操作:

"Epilog"  (1)

"Epilog" 在每次计算结束后执行一些小操作:

指令的选项  (8)

"Command"  (4)

只提供字符串时,直接执行查询:

这相当于用以下形式编写命令:

File 封装运行文件中的代码:

大多数情况下可以省去 Association

URL 封装直接运行线上的代码:

大多数情况下可以省去 Association

将代码放入 CloudObject

从云端直接计算:

大多数情况下可以省去 Association

"ReturnType"  (1)

默认情况下,使用会话创建期间指定的 "ReturnType" 执行该指令:

在指令中指定 "ReturnType" 将覆盖会话的 "ReturnType"

"TemplateArguments"  (3)

运行指令时,可内嵌 TemplateExpression

可用 "TemplateArguments" 填充 TemplateSlot

如果提供的是非列表参数,将单个模板参数传递给模板:

可以命名模板插槽并使用 Association 将命名参数传递给模板:

应用  (2)

DatabaseReference 可以表示一个内存 SQLite 数据库:

所有在内存会话期间进行的操作会在 ExternalEvaluate 调用的最后丢失:

数据库中有副效应的操作通常返回 Null

对于某些后端,还可以插入数据并指定返回值:

可能存在的问题  (1)

通常数据库使用服务器时区返回日期:

更改查询以返回位于特定时区的列:

或可使用 "SessionProlog" 设置默认时区: