跳到主要内容

SQL模板

SQL模板是什么

SQL 模板为开发者提供了在 MySQL 类型的数据库上,直接运行 SQL 命令的方式。通过 SQL 模板,可以更容易通过 SQL 命令查询、操作数据库;在数据模型方法不满足复杂查询、多表联表查询等的情况下,可以通过 SQL 模板来解决这类问题。

另外,SQL 模板本身在运行时由于限定了参数,同时默认带有权限条件,因此可以在小程序端、Web端也发起调用,相比直接的 SQL 命令,适用场景更多,使用更便利。

使用方式

当前 SQL 模板与数据模型关联,相关 SQL 操作的主表即为所关联数据模型对应的表。

在数据模型的管理页面,可以进入 SQL 模板页面,创建及管理 SQL 模板。

创建

在创建 SQL 模板时,需要填写模板名称及 SQL 命令,也可以填写描述用于记录模板相关信息。

  • 模板名称:支持英文、数字及下划线;模板名称将用于后续调用。
  • SQL 命令:支持 SELECT、INSERT INTO、UPDATE、DELETE命令。
  • 描述:用于记录描述 SQL 模板相关内容。

测试

在创建时,或创建后,均可以测试运行 SQL 模板。在测试运行时,需要根据 SQL 命令中的参数格式,填写测试用的参数值。

SQL语句中的参数均需要填写入参后才可运行。

测试运行后,可以通过结果页面,查看到实际运行结果输出。

体验数据及正式数据 如果您的环境支持区分体验及正式数据,在测试时将可以选择在体验数据上测试或在正式数据上测试;测试将直接操作及影响到数据库表中的数据,请您谨慎选择运行。

管理

您可以通过 SQL 模板的页面查询到当前模型对应的 SQL 模板,可以针对 SQL 模板进行修改、测试、删除。

修改或删除 SQL 模板可能影响到调用 SQL 模板的页面组件、页面 Query、代码等,请谨慎操作。

调用

通过 SDK 中模型方法即可调用模型下的 SQL 模板。

方法使用前需要进行 SDK 初始化,更多 SDK 详情可以查询 SDK 文档


const models = app.models;

const { data } = await models.modelName.runSqlTemplate({ //modelName 需要修改为具体模型的标识
templateName: "selectExample",
params: {
"foo": "bar",
"w.pageNew.foo.bar": 1
},
//envType: "pre", 可选参数
});

// 返回查询到的数据
console.log(data);

方法说明:

  • 调用方法:models.< modelName >.runSqlTemplate, 其中 modelName 需要替换为具体的数据模型标识。
  • 参数:templateName,填写为 SQL 模板名称
  • 参数:params ,以 key : value 形式提供变量名与变量值的对应;其中变量名对应为 SQL 模板中写入的参数。变量值则是 SQL 模板执行时自动填入的值。
  • 参数:envType, 体验数据或正式数据操作指示,可选参数,默认值为 prod,可选填:prodpre

SQL 语句

支持命令

当前 SQL 模板中仅支持如下的数据操作命令,不支持表操作、库操作相关命令:

  • SELECT
  • INSERT INTO
  • UPDATE
  • DELETE

一个 SQL 模板中仅可以写入一条 SQL 命令,不支持通过“;“引入多条 SQL 命令。

参数

SQL 语句中,支持通过 {{param}} 的方式引入变量参数。变量参数用于在实际调用和运行 SQL 模板时传递变量值。

参数写法使用{{ }} 符号进行包裹。

特定参数及方法

SQL 模板中支持了部分特殊方法,用于获取系统值等信息。

  • $w.sql.user.userId():方法无需入参,获取当前调用用户的 ID,此 ID 为云开发用户体系中,用户信息的 ID 标识。
  • $w.sql.user.openId():方法无需入参,获取当前调用用户的 openId,当 SQL 模板从小程序前端被调用时,通过此方法可以获得调用用户的小程序 openid。
  • $w.sql.model.tableName('model_name'):方法需要填写模型标识作为入参,通过此方法可以获取运行时模型对应的数据库表名。当环境支持 staging 能力时,此方法可以根据调用环境,识别为正式数据表或体验数据表。
  • $w.sql.auth.rowPermission('model_name'):方法需要填写模型标识作为入参,通过此方法可以获取运行时用户能获取到的数据表的行权限。