Drizzle ORM 用于 SQL 数据库的 TypeScript ORM开源项目

我要开发同款
匿名用户2023年05月04日
190阅读
开发技术TypeScript
所属分类数据库管理工具、数据库相关
授权协议Apache 2.0

作品详情

DrizzleORM是用于SQL数据库的TypeScriptORM,在设计时考虑到了最大的类型安全性。它带有用于自动生成SQL迁移的drizzle-kitCLI。

DrizzleORM是一个库,而不是一个框架,它的主要哲学是“如果你知道SQL,你就知道DrizzleORM”,因此设计的时候尽可能遵循类似SQL的语法,强类型化并在编译时就会失败,而不是在运行时。

功能列表全类型安全智能自动迁移生成没有ORM学习曲线用于表定义和查询的类似于SQL的语法一流的全类型连接任何复杂性的全类型部分和非部分选择自动推断DB模型的TS类型以分别选择和插入Zod架构生成零依赖支持的数据库DatabaseStatus PostgreSQL✅DocsMySQL✅DocsSQLite✅DocsCloudflareD1✅DocslibSQL✅DocsTurso✅DocsVercelPostgres✅DocsDynamoDB⏳ MSSQL⏳ CockroachDB⏳安装npminstalldrizzle-ormnpminstall-Ddrizzle-kit功能展示(PostgreSQL)

注意:不要忘记安装 pg 和 @types/pg 包。

import{drizzle}from'drizzle-orm/node-postgres';import{integer,pgTable,serial,text,timestamp,varchar}from'drizzle-orm/pg-core';import{InferModel,eq,sql}from'drizzle-orm';import{Pool}from'pg';exportconstusers=pgTable('users',{id:serial('id').primaryKey(),fullName:text('full_name').notNull(),phone:varchar('phone',{length:20}).notNull(),role:text('role',{enum:['user','admin']}).default('user').notNull(),cityId:integer('city_id').references(()=>cities.id),createdAt:timestamp('created_at').defaultNow().notNull(),updatedAt:timestamp('updated_at').defaultNow().notNull(),});exporttypeUser=InferModel<typeofusers>;exporttypeNewUser=InferModel<typeofusers,'insert'>;exportconstcities=pgTable('cities',{id:serial('id').primaryKey(),name:text('name').notNull(),});exporttypeCity=InferModel<typeofcities>;exporttypeNewCity=InferModel<typeofcities,'insert'>;constpool=newPool({connectionString:'postgres://user:password@host:port/db',});constdb=drizzle(pool);//InsertconstnewUser:NewUser={fullName:'JohnDoe',phone:'+123456789',};constinsertedUsers/*:User[]*/=awaitdb.insert(users).values(newUser).returning();constinsertedUser=insertedUsers[0]!;constnewCity:NewCity={name:'NewYork',};constinsertedCities/*:City[]*/=awaitdb.insert(cities).values(newCity).returning();constinsertedCity=insertedCities[0]!;//UpdateconstupdateResult/*:{updated:Date}[]*/=awaitdb.update(users).set({cityId:insertedCity.id,updatedAt:newDate()}).where(eq(users.id,insertedUser.id)).returning({updated:users.updatedAt});//SelectconstallUsers/*:User[]*/=awaitdb.select().from(users);//SelectcustomfieldsconstupperCaseNames/*:{id:number;name:string}[]*/=awaitdb.select({id:users.id,name:sql<string>`upper(${users.fullName})`,}).from(users);//Joins//Youwouldn'tBELIEVEhowSMARTtheresulttypeis!
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论