ts-sql-query 用于 TypeScript:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
\n

ts-sql-query 用于 TypeScript:完整指南与示例

\n\n
\n

1. 这是什么以及为什么需要它

\n

\n ts-sql-query 是一个强大的 TypeScript 库,它允许你编写具有完全类型支持的 SQL 查询(类型安全)。它提供了一个便捷的 DSL(领域特定语言)来构建 SQL 查询,同时每个查询都会由 TypeScript 编译器根据数据库模式进行检查。这意味着表名、字段名或数据类型中的错误将在编译阶段被捕获,而不是在运行时。\n

\n

\n 为什么需要它?在传统方法(原始 SQL 字符串或 ORM)中,开发者经常遇到问题:列名拼写错误、类型不匹配、重构困难。ts-sql-query 通过为所有操作提供严格的类型化来解决这些问题:SELECT、INSERT、UPDATE、DELETE、JOIN、子查询、聚合函数等等。该库支持多种数据库管理系统(PostgreSQL、MySQL、SQLite、MariaDB、MSSQL),并且可以直接与驱动程序或通过连接池一起使用。\n

\n

\n 与 ORM(例如 TypeORM 或 Prisma)不同,ts-sql-query 不会将 SQL 隐藏在抽象层之后,而是使其成为 TypeScript 代码的一部分。你仍然编写 SQL,但带有自动补全、类型检查且没有 SQL 注入风险。对于重视性能和对查询完全控制,同时又希望利用静态类型优势的项目来说,这是理想的选择。\n

\n
\n\n
\n

2. 安装

\n

通过 npm 进行安装。你需要安装库本身以及你的数据库驱动程序。

\n
# 安装主库\nnpm install ts-sql-query\n\n# 安装 PostgreSQL 驱动程序(示例)\nnpm install pg\n\n# 安装 MySQL 驱动程序\nnpm install mysql2\n\n# 安装 SQLite 驱动程序\nnpm install better-sqlite3\n\n# 安装 SQLite 驱动程序(异步)\nnpm install sql.js\n\n# 安装 Node.js 类型(如果使用)\nnpm install --save-dev @types/node
\n

安装驱动程序后,你需要创建一个数据库连接。ts-sql-query 为每个驱动程序提供了适配器。

\n
\n\n
\n

3. 快速入门 — 最小工作示例

\n

我们来看一个 PostgreSQL 的示例。创建一个简单的 users 表并执行一个 SELECT 查询。

\n
import { createPool } from 'pg';\nimport { PostgreSqlConnection } from 'ts-sql-query/connections/PostgreSqlConnection';\n\n// 1. 创建连接池\nconst pool = createPool({\n    host: 'localhost',\n    port: 5432,\n    database: 'testdb',\n    user: 'user',\n    password: 'password',\n});\n\n// 2. 创建连接类\nclass DBConnection extends PostgreSqlConnection {\n    // 可以在这里定义用于操作表的方法\n}\n\n// 3. 创建连接实例\nconst connection = new DBConnection(pool);\n\n// 4. 为 users 表定义类型\ninterface User {\n    id: number;\n    name: string;\n    email: string;\n    age: number;\n}\n\n// 5. 创建用于操作表的对象\nconst users = connection.table('users').columns({\n    id: 'id',\n    name: 'name',\n    email: 'email',\n    age: 'age',\n});\n\n// 6. 执行查询\nasync function getUsers() {\n    const query = connection\n        .selectFrom(users)\n        .select(users.id, users.name, users.email)\n        .where(users.age.greaterThan(18))\n        .orderBy(users.name, 'asc');\n\n    const result = await query.executeSelectMany();\n    return result;\n}\n\ngetUsers().then(users => {\n    console.log('Users:', users);\n}).catch(err => {\n    console.error('Error:', err);\n});
\n

在这个示例中,我们创建了

推荐