sqlx-ts
SQLx-ts 是一个命令行应用程序,具有编译时检查查询的功能,无需使用 DSL,并根据 SQL 生成类型以保持代码类型安全
- 编译时检查查询 - 永远不会将损坏的 SQL 查询发布到生产环境(并且 sqlx-ts 不是 ORM)
- TypeScript 类型生成 - 根据原始 SQL 生成类型定义,可与任何 MySQL 或 PostgreSQL 驱动程序一起使用
- 数据库无关 - 支持 PostgreSQL 和 MySQL(未来将支持更多数据库)
- TypeScript 和 JavaScript - 同时支持 TypeScript 和 JavaScript
安装
安装 sqlx-ts npm 模块(推荐)
如果使用 npm
$ npm install sqlx-ts
如果使用 yarn
$ yarn add sqlx-ts
你也可以全局安装 sqlx-ts
$ npm install -g sqlx-ts
通过 npm 安装 sqlx-ts 也会安装与 npm 模块版本相同的 sqlx-ts
二进制文件。
通过运行以下命令验证安装:
$ npx sqlx-ts --version
在代码中使用 sqlx-ts
在基于 TypeScript 的项目中:
import { sql } from 'sqlx-ts'
// ...
const query = sql`SELECT * FROM some_table;`
// ...
在基于 Babel 的项目中:
import { sql } from 'sqlx-ts'
const query = sql`SELECT * FROM some_table;`
// ... 或者
const { sql } = require('sqlx-ts')
const query = sql`SELECT * FROM some_table;`
单独安装二进制文件
你可以选择单独安装 sqlx-ts,而不是使用 npm i
使用 install.sh
sqlx-ts 的二进制文件名为 sqlx-ts
。
可以获取适用于 Windows、macOS 和 Linux 的预编译 sqlx-ts 二进制文件压缩包。Linux 和 Windows 二进制文件是静态可执行文件。建议未明确提及平台的用户下载这些压缩包之一。
如果你是 macOS 用户,可以通过 install.sh 安装 sqlx-ts:
# macOS & ARM CPU
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os darwin --cpu arm64
# macOS & X64 CPU
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os darwin --cpu x64
如果你是 Windows 用户,可以通过 install.sh 安装 sqlx-ts:
# Windows & x32
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os win32 --cpu x32
# Windows & x64
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os win32 --cpu x32
如果你是 Linux 用户,可以通过 install.sh 安装 sqlx-ts:
# Linux & x32
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os linux --cpu x32
# Linux & x64
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os linux --cpu x64
# Linux & arm
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --os linux --cpu arm64
要安装特定的构建版本,请前往发布页面查找构建版本的确切名称
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | sh -s -- --artifact sqlx-ts-v0.1.0-macos-arm.zip
升级到新版本可以通过获取下一个版本的 sqlx-ts 构建版本并使用 install.sh 的 --force
命令来完成
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | \
sh -s -- --artifact ssqlx-ts-v0.1.0-macos-arm.zip --force
对于更高级的用法,请查看 install.sh 的 --help
命令
$ curl -LSfs https://jasonshin.github.io/sqlx-ts/install.sh | \
sh -s -- --help
路线图
sqlx-ts 不是 ORM!
sqlx-ts 支持编译时检查查询和根据 SQL 生成类型。然而,它并不通过提供用于构建查询的 DSL(领域特定语言)来实现这一点。相反,它提供了一个(几乎是)宏,该宏接受常规 SQL 作为输入,并确保它对目标数据库有效。它的工作原理是 sqlx-ts 在编译时连接到您的本地或开发数据库,并让数据库本身验证查询,同时根据 information_schema 生成类型。这可以提供许多典型 ORM 无法提供的好处
- 由于 sqlx-ts 只是将查询发送回数据库,几乎任何 SQL 语法都可以在 sqlx-ts 中使用(包括数据库扩展添加的内容)
- 您可以轻松优化查询,因为 SQL 不是使用查询构建器或 ORM 接口构建的
- 生成的类型可以很好地与几乎任何数据库驱动程序甚至 ORM(如果它们有良好的 TypeScript 支持,允许您覆盖输入和输出类型)一起使用
但这也带来了一些影响
- sqlx-ts 检索的信息量取决于数据库的类型(例如 MySQL 与 PostgreSQL)
如果您正在寻找 ORM,可以查看 Sequelize 或 Prisma。
在原生 JavaScript 中使用 sqlx-ts
如果您尝试在原生 JS 中使用 sqlx-ts,TypeScript 类型生成功能将不会有帮助。您可以简单地使用 SQL 检查功能来确保 JS 代码中的 SQL 安全并在编译时进行检查。
动机
我希望将强大的编译时安全性理念引入 Node.js。sqlx 是一个很好的例子,它提供了 Rust 代码中 SQL 的编译时检查,而 Rust 本身为像 sqlx 这样的工具提供了很好的环境。sqlx-ts 受到 sqlx 的极大启发,但解决了基于代码中存在的 SQL 查询生成 TypeScript 接口的额外问题。