跳到内容
Tauri

SQL

插件提供了一个前端接口,用于通过 sqlx 与 SQL 数据库通信。它支持 Sqlite、MySQL 和 PostgreSQL 驱动程序,通过 Cargo 功能启用。

支持的平台

此插件需要 Rust 版本至少为 1.77.2

平台 级别 注释
windows
linux
macos
android
ios

设置

安装 SQL 插件即可开始使用。

使用项目的包管理器添加依赖项

npm run tauri add sql

安装插件后,您必须选择支持的数据库引擎。可用的引擎有 Sqlite、MySQL 和 PostgreSQL。在 src-tauri 文件夹中运行以下命令以启用您首选的引擎

cargo add tauri-plugin-sql --features sqlite

用法

所有插件的 API 都可以通过 JavaScript guest 绑定使用

路径相对于 tauri::api::path::BaseDirectory::AppConfig

import Database from '@tauri-apps/plugin-sql';
// when using `"withGlobalTauri": true`, you may use
// const Database = window.__TAURI__.sql;
const db = await Database.load('sqlite:test.db');
await db.execute('INSERT INTO ...');

语法

我们使用 sqlx 作为底层库,并采用其查询语法。

当替换查询数据时,使用“$#”语法

const result = await db.execute(
"INSERT into todos (id, title, status) VALUES ($1, $2, $3)",
[todos.id, todos.title, todos.status],
);
const result = await db.execute(
"UPDATE todos SET title = $1, status = $2 WHERE id = $3",
[todos.title, todos.status, todos.id],
);

迁移

此插件支持数据库迁移,允许您随时间管理数据库模式演变。

定义迁移

迁移在 Rust 中使用 Migration 结构定义。每个迁移应包括唯一的版本号、描述、要执行的 SQL 以及迁移类型(Up 或 Down)。

迁移示例

use tauri_plugin_sql::{Migration, MigrationKind};
let migration = Migration {
version: 1,
description: "create_initial_tables",
sql: "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);",
kind: MigrationKind::Up,
};

向插件构建器添加迁移

迁移在插件提供的 Builder 结构中注册。使用 add_migrations 方法将迁移添加到特定数据库连接的插件中。

添加迁移的示例

src-tauri/src/main.rs
use tauri_plugin_sql::{Builder, Migration, MigrationKind};
fn main() {
let migrations = vec![
// Define your migrations here
Migration {
version: 1,
description: "create_initial_tables",
sql: "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);",
kind: MigrationKind::Up,
}
];
tauri::Builder::default()
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations("sqlite:mydatabase.db", migrations)
.build(),
)
...
}

应用迁移

要在初始化插件时应用迁移,请将连接字符串添加到 tauri.conf.json 文件

src-tauri/tauri.conf.json
{
"plugins": {
"sql": {
"preload": ["sqlite:mydatabase.db"]
}
}
}

或者,客户端 load() 也会为给定的连接字符串运行迁移

import Database from '@tauri-apps/plugin-sql';
const db = await Database.load('sqlite:mydatabase.db');

确保迁移以正确的顺序定义,并且可以安全地多次运行。

迁移管理

  • 版本控制:每个迁移都必须具有唯一的版本号。这对于确保迁移以正确的顺序应用至关重要。
  • 幂等性:编写迁移的方式应使其可以安全地重新运行,而不会导致错误或意外后果。
  • 测试:彻底测试迁移,以确保它们按预期工作,并且不会损害数据库的完整性。

权限

默认情况下,所有潜在危险的插件命令和作用域都被阻止且无法访问。您必须修改 capabilities 配置中的权限才能启用这些。

有关更多信息,请参阅功能概述,并参阅使用插件权限的分步指南

src-tauri/capabilities/default.json
{
"permissions": [
...,
"sql:default",
"sql:allow-execute",
]
}

默认权限

默认权限

此权限集配置了 sql 插件中可用的数据库操作类型。

已授予的权限

所有读取相关操作均已启用。还允许加载或关闭连接。

此默认权限集包括以下内容

  • allow-close
  • allow-load
  • allow-select

权限表

标识符 描述

sql:allow-close

启用 close 命令,无需任何预配置的作用域。

sql:deny-close

拒绝 close 命令,无需任何预配置的作用域。

sql:allow-execute

启用 execute 命令,无需任何预配置的作用域。

sql:deny-execute

拒绝 execute 命令,无需任何预配置的作用域。

sql:allow-load

启用 load 命令,无需任何预配置的作用域。

sql:deny-load

拒绝 load 命令,无需任何预配置的作用域。

sql:allow-select

启用 select 命令,无需任何预配置的作用域。

sql:deny-select

拒绝 select 命令,无需任何预配置的作用域。


© 2025 Tauri 贡献者。CC-BY / MIT