0


HOW - 浅试前端的 Typescript ORM(含 Turso SQLite)

一、TypeScript、Turso 和 Drizzle

将 TypeScript、Turso 和 Drizzle 结合使用,可以构建强类型、安全且高效的全栈应用程序。

这三者分别在不同的层面上提供支持:

  • TypeScript:提供强类型和现代 JavaScript 特性,提升代码质量和开发效率。
  • Turso:一个由 ChiselStrike 提供的现代数据库服务,适用于边缘计算和分布式系统。官网
  • Drizzle:一个强类型的 ORM,用于简化数据库操作并确保类型安全。官网

使用场景

假设你正在构建一个分布式的任务管理系统,用户可以在不同设备上离线访问和同步数据。你可以使用 TypeScript 编写应用程序逻辑,使用 Turso 作为分布式数据库,并使用 Drizzle 作为 ORM 来处理数据库操作。

实现步骤

1. 安装依赖

首先,通过 npm 安装所需的库:

npminstall typescript drizzle-orm @turso/client

2. 配置 TypeScript

创建一个

tsconfig.json

文件来配置 TypeScript:

{"compilerOptions":{"target":"es5","module":"commonjs","strict":true,"esModuleInterop":true,"skipLibCheck":true,"forceConsistentCasingInFileNames":true}}

3. 配置 Turso 数据库

假设你已经在 Turso 创建了一个数据库,可以通过 Turso 提供的客户端来连接数据库。

创建一个

db.ts

文件来配置数据库连接:

import{ createClient }from'@turso/client';constTURSO_URL='https://your-turso-instance-url';constTURSO_TOKEN='your-turso-token';exportconst turso =createClient(TURSO_URL,TURSO_TOKEN);

4. 使用 Drizzle 作为 ORM

db.ts

文件中,使用 Drizzle 配置 ORM:

import{ drizzle }from'drizzle-orm';import{ turso }from'./tursoClient';// 上一步的 turso 客户端exportconst db =drizzle(turso);

5. 定义模型

models

文件夹中创建

task.ts

文件来定义模型:

import{ defineModel }from'drizzle-orm';exportconst Task =defineModel({
  table:'tasks',
  columns:{
    id:{ type:'serial', primary:true},
    title:{ type:'varchar', length:255},
    description:{ type:'text'},
    isCompleted:{ type:'boolean',default:false},
    createdAt:{ type:'timestamp',default:'now()'},},});

6. 执行数据库操作

在应用程序中使用 Drizzle 进行数据库操作,例如添加任务、查询任务等。

创建一个

taskService.ts

文件:

import{ db }from'./db';import{ Task }from'./models/task';// 插入新任务exportasyncfunctionaddTask(title:string, description:string){const newTask =await db.insert(Task).values({
    title,
    description,});return newTask;}// 查询所有任务exportasyncfunctiongetTasks(){const tasks =await db.select(Task);return tasks;}// 更新任务状态exportasyncfunctioncompleteTask(taskId:number){await db.update(Task).set({ isCompleted:true}).where(Task.columns.id.equals(taskId));}

7. 创建迁移脚本

使用 Drizzle 的迁移功能管理数据库架构变更。在

migrations

文件夹中创建

initialMigration.ts

文件:

import{ MigrationBuilder }from'drizzle-orm/migration';exportconstup=(pgm: MigrationBuilder)=>{
  pgm.createTable('tasks',{
    id:'id',
    title:{ type:'varchar(255)', notNull:true},
    description:{ type:'text'},
    is_completed:{ type:'boolean',default:false},
    created_at:{ type:'timestamp',default: pgm.func('current_timestamp')},});};exportconstdown=(pgm: MigrationBuilder)=>{
  pgm.dropTable('tasks');};

然后可以通过命令行工具运行迁移:

npx drizzle-orm migrate up

结论

通过将 TypeScript、Turso 和 Drizzle 结合使用,你可以构建一个具有强类型支持、现代数据库特性和简洁 ORM API 的应用程序。这种组合适用于构建高效、可靠的全栈应用,特别是在需要处理分布式数据和离线访问的场景中。

二、ORM:不必编写复杂的 SQL 查询

TypeScript ORM 和 Drizzle

TypeScript ORM 是用于与数据库交互的对象关系映射(ORM)工具,它允许开发人员以面向对象的方式操作数据库,而不必编写复杂的 SQL 查询。ORM 工具将数据库表映射到编程语言中的类,并将表记录映射到类的实例,从而简化了数据库操作。

Drizzle 是一个用于 TypeScript 的 ORM 工具,它旨在简化数据库交互,提供更好的类型安全性和开发者体验。Drizzle 支持多种数据库,包括 PostgreSQL、MySQL、SQLite 等。

Drizzle 的特点

  1. 类型安全:Drizzle 使用 TypeScript 编写,提供了强类型支持,可以在编译时捕获错误,减少运行时错误的可能性。
  2. 简洁的 API:Drizzle 提供了直观的 API,使得数据库操作更加简洁明了。
  3. 跨数据库支持:支持多种数据库,包括 PostgreSQL、MySQL、SQLite 等。
  4. 自动迁移:提供数据库迁移功能,可以方便地管理数据库架构的变更。

Drizzle 的使用示例

下面是如何在一个 TypeScript 项目中使用 Drizzle 的简单示例:

1. 安装 Drizzle

首先,通过 npm 或 yarn 安装 Drizzle:

npminstall drizzle-orm drizzle-orm-pg
# oryarnadd drizzle-orm drizzle-orm-pg

2. 配置数据库连接

创建一个

db.ts

文件来配置数据库连接:

import{ createPool }from'pg';import{ drizzle }from'drizzle-orm-pg';// 创建 PostgreSQL 连接池const pool =createPool({
  host:'localhost',
  user:'your_user',
  password:'your_password',
  database:'your_database',
  port:5432,});// 使用 drizzle 创建 ORM 实例exportconst db =drizzle(pool);

3. 定义模型

定义一个模型来映射数据库表:

import{ defineModel }from'drizzle-orm';// 定义 User 模型exportconst User =defineModel({
  table:'users',
  columns:{
    id:{ type:'serial', primary:true},
    name:{ type:'varchar', length:255},
    email:{ type:'varchar', length:255, unique:true},
    createdAt:{ type:'timestamp',default:'now()'},},});

4. 执行查询

使用定义的模型执行数据库操作:

import{ db }from'./db';import{ User }from'./models/user';// 插入新用户const newUser =await db.insert(User).values({
  name:'John Doe',
  email:'[email protected]',});// 查询用户const users =await db.select(User).where(User.columns.name.equals('John Doe'));console.log(users);

5. 迁移

Drizzle 也支持数据库迁移,通过编写迁移脚本管理数据库架构变更。

迁移脚本示例:

import{ MigrationBuilder }from'drizzle-orm/migration';exportconstup=(pgm: MigrationBuilder)=>{
  pgm.createTable('users',{
    id:'id',
    name:{ type:'varchar(255)', notNull:true},
    email:{ type:'varchar(255)', unique:true, notNull:true},
    created_at:{ type:'timestamp',default: pgm.func('current_timestamp')},});};exportconstdown=(pgm: MigrationBuilder)=>{
  pgm.dropTable('users');};

然后可以通过命令行工具运行迁移:

npx drizzle-orm migrate up

通过这些步骤,你可以使用 Drizzle 在 TypeScript 项目中简化数据库操作,并享受类型安全和简洁 API 带来的便利。

标签: 前端 sqlite 数据库

本文转载自: https://blog.csdn.net/weixin_58540586/article/details/140631126
版权归原作者 @PHARAOH 所有, 如有侵权,请联系我们删除。

“HOW - 浅试前端的 Typescript ORM(含 Turso SQLite)”的评论:

还没有评论