Drizzle ORM 是用于 SQL 数据库的 TypeScript ORM,在设计时考虑到了最大的类型安全性。它带有用于自动生成 SQL 迁移的 drizzle-kit CLI 。
Drizzle ORM 是一个库,而不是一个框架,它的主要哲学是“如果你知道 SQL,你就知道 Drizzle ORM”,因此设计的时候尽可能遵循类似 SQL 的语法,强类型化并在编译时就会失败,而不是在运行时。
Database | Status | |
---|---|---|
PostgreSQL | ✅ | Docs |
MySQL | ✅ | Docs |
SQLite | ✅ | Docs |
Cloudflare D1 | ✅ | Docs |
libSQL | ✅ | Docs |
Turso | ✅ | Docs |
Vercel Postgres | ✅ | Docs |
DynamoDB | ⏳ | |
MS SQL | ⏳ | |
CockroachDB | ⏳ |
npm install drizzle-orm
npm install -D drizzle-kit
注意:不要忘记安装 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';
export const users = 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(),
});
export type User = InferModel<typeof users>;
export type NewUser = InferModel<typeof users, 'insert'>;
export const cities = pgTable('cities', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
});
export type City = InferModel<typeof cities>;
export type NewCity = InferModel<typeof cities, 'insert'>;
const pool = new Pool({
connectionString: 'postgres://user:password@host:port/db',
});
const db = drizzle(pool);
// Insert
const newUser: NewUser = {
fullName: 'John Doe',
phone: '+123456789',
};
const insertedUsers /* : User[] */ = await db.insert(users).values(newUser).returning();
const insertedUser = insertedUsers[0]!;
const newCity: NewCity = {
name: 'New York',
};
const insertedCities /* : City[] */ = await db.insert(cities).values(newCity).returning();
const insertedCity = insertedCities[0]!;
// Update
const updateResult /* : { updated: Date }[] */ = await db.update(users)
.set({ cityId: insertedCity.id, updatedAt: new Date() })
.where(eq(users.id, insertedUser.id))
.returning({ updated: users.updatedAt });
// Select
const allUsers /* : User[] */ = await db.select().from(users);
// Select custom fields
const upperCaseNames /* : { id: number; name: string }[] */ = await db
.select({
id: users.id,
name: sql<string>`upper(${users.fullName})`,
})
.from(users);
// Joins
// You wouldn't BELIEVE how SMART the result type is! ��
const allUsersWithCities = await db
.select({
id: users.id,
name: users.fullName,
city: {
id: cities.id,
name: cities.name,
},
})
.from(users)
.leftJoin(cities, eq(users.cityId, cities.id));
// Delete
const deletedNames /* : { name: string }[] */ = await db.delete(users)
.where(eq(users.id, insertedUser.id))
.returning({ name: users.fullName });
#-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import create_engine,func from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer
#-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import create_engine,func from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,
#-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import create_engine,func from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer
问题内容: 我正在寻找一个具有免费访问权限的公共SQL数据库,在其中可以对一些有意义的数据(而不是item1,item2,item3)免费运行一些查询。你有没有看到?如果它与一些教程一起提供,那就更好了。 供应商关系不大,只要可以使用通用JDBC客户端进行连接即可。 问题答案: 尝试SQL练习 从学习阶段开始
问题内容: 我正在进行的一个项目在不久的将来可能会跨越几百万行,所以我正在研究我使用的数据库,因为这肯定会证明是一个问题。据我所读,一旦涉及到表的2,000,000行问题,SQL的所有形式都会出现问题。对于这些大型项目,有没有推荐好的数据库? 我正在谈论的是一个网站,归档旧条目并不理想,但是如果证明这是我无法克服的问题,则可以这样做。 谢谢。 问题答案: 我已经在MS SQL Server中使用了
要在运行OSV7.1的IBM i(AS/400,iSeries)计算机上使用(DB2)数据库,设置Oracle Data Modeler(4.0.2.840)的正确方法是什么? 在New/Select数据库连接下,我选择了JDBC选项卡,然后选择了“Other ThirdParty Driver”,然后输入: 驱动程序类:com.ibm.as400.access.as400jdbcdriver 数
任何人都知道如何在JDBC连接配置下参数化数据库URL。 数据库URL: jdbc: sqlserver://ovh-sql1:1433; Database aseName=user_1 JDBC驱动程序类:com.microsoft.sqlserver.jdbc.SQLServerDriver 我想参数化DatabaseName=user\u 1 正常参数化在此不起作用。请提出建议。
29. 使用SQL数据库 Spring Framework为使用SQL数据库提供了大量的支持。从使用JdbcTemplate的直接JDBC访问,到彻底的“对象关系映射”技术(如Hibernate)。Spring Data提供了另一层级的功能,直接从接口创建Repository实现,并使用约定根据方法名生成查询。
Spring Framework为使用SQL数据库提供了广泛的支持,从使用JdbcTemplate的直接JDBC访问到完成“对象关系映射”技术(如Hibernate)。 Spring Data提供了更多级别的功能:直接从接口创建存储库实现,并使用约定从方法名称生成查询。 4.9.1 配置数据源 Java的javax.sql.DataSource接口提供了一种处理数据库连接的标准方法。 传统上,“D
在我的Spring Boot项目中,我正在尝试为MongoDb实现一个数据库迁移,我对MongoDb和mongock非常陌生<下面是关于错误的一些详细信息,以及到目前为止我所做的工作: > 我的pom有以下依赖项: 我已经用“ 并将少量数据插入DB。 在application.properties文件中添加以下行 蒙哥克。更改日志扫描包=com。产品目标配置 现在,当我构建项目“mvn clean
我也使用了SQL和Oracle,但我有一个很大的困惑。在oracle中,用户属于数据库还是数据库属于用户。因为我已经使用sql命令在oracle中创建了一个新用户。然后我创建了表,但我没有创建任何数据库,那么新表去了哪里? 我猜想表与oracle中的用户相关联,就像创建表的人是表的所有者,其他用户无法访问该表,因此无需通过先创建数据库,然后在其下创建表来区分它们。 但是在MYSQL中(使用PhpM