Introduction
Drizzle ORM is a simple, lightwiegt ORM for TypeScript. It is designed to be simple to use and easy to understand. It is designed to be used with MySQL databases, but can be easily extended to work with other databases.
Get Started
Drizzle ORM supports PostgreSQL, MySQL, and SQLite. This guide will focus on MySQL, but the concepts are the same for all databases.
You can reach out more details on Drizzle ORM
Installation
To install Drizzle ORM, you need to install the package from npm.
npm i drizzle-orm pg dotenv
npm i -D drizzle-kit tsx @types/pg
npm i drizzle-orm pg dotenv- This command installs the Drizzle ORM package, the pg package, and the dotenv package. The pg package is required for PostgreSQL support, but it is not required for MySQL or SQLite.
npm i -D drizzle-kit tsx @types/pg- This command installs the Drizzle Kit package, the tsx package, and the @types/pg package. The Drizzle Kit package is required for Drizzle ORM to work with TypeScript.
Configuration
To configure Drizzle ORM, you need to create a
.envfile in the root of your project. This file should contain the following information:
DATABASE_URL=your-database-url
Replace
your-database-urlwith the URL of your database. For example, if you are using MySQL, the URL should look like this:
DATABASE_URL=mysql://username:password@localhost:3306/database
Setup drizzle config in your
drizzle.config.tsfile.
import 'dotenv/config';
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
out: './drizzle',
schema: './src/db/schema.ts',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
});
Create a Table
To create a table in your database, you need to define a schema in a file called
schema.ts. This file should contain the following information:
import { pgTable, unique, integer, varchar } from 'drizzle-orm/pg-core';
import { sql } from 'drizzle-orm';
export const users = pgTable(
'users',
{
id: integer().primaryKey().generatedAlwaysAsIdentity({
name: 'users_id_seq',
startWith: 1,
increment: 1,
minValue: 1,
maxValue: 2147483647,
cache: 1,
}),
name: varchar({ length: 255 }).notNull(),
age: integer().notNull(),
email: varchar({ length: 255 }).notNull(),
},
(table) => {
return {
usersEmailUnique: unique('users_email_unique').on(table.email),
};
}
);
We define a table called
userswith four columns:id,name,age, andidcolumn is an auto-incrementing primary key, and thename,age, and
Connect to the Database
Create a index.ts file in the src/db directory and initialize the connection to the database.
import 'dotenv/config';
import { drizzle } from 'drizzle-orm/node-postgres';
const db = drizzle(process.env.DATABASE_URL!);
We have already define the DATABASE_URL in the
.envfile. We are using thedrizzlefunction to connect to the database.
Insert Data
To insert data into the
userstable, you can use theinsertmethod on thedbobject.
import { users } from './schema';
const user = await db.insert(users).values({
name: 'John Doe',
age: 30,
email: '
});
We are using the
insertmethod on thedbobject to insert a new user into theuserstable. We are passing an object with thename,age, andvaluesmethod.
Query Data
To query data from the
userstable, you can use theselectmethod on thedbobject.
import { users } from './schema';
const user = await db.select(users).where(users.id.eq(1)).execute();
We are using the
selectmethod on thedbobject to query a user from theuserstable. We are using thewheremethod to filter the results based on theidcolumn.
Update Data
To update data in the
userstable, you can use theupdatemethod on thedbobject.
import { users } from './schema';
const user = await db.update(users).set({ age: 31 }).where(users.id.eq(1)).execute();
We are using the
updatemethod on thedbobject to update a user in theuserstable. We are using thesetmethod to set theagecolumn to31, and thewheremethod to filter the results based on theidcolumn.
Delete Data
To delete data from the
userstable, you can use thedeletemethod on thedbobject.
import { users } from './schema';
const user = await db.delete(users).where(users.id.eq(1)).execute();
We are using the
deletemethod on thedbobject to delete a user from theuserstable. We are using thewheremethod to filter the results based on theidcolumn.
Conclusion
Drizzle ORM is a simple, lightweight ORM for TypeScript. It is designed to be simple to use and easy to understand. It is designed to be used with MySQL databases, but can be easily extended to work with other databases. You can reach out more details on Drizzle ORM
Thank You
Thank you for reading this guide. I hope you found it helpful. If you have any questions or feedback, please feel free to reach out to me. I would love to hear from you.
Top comments (3)
is Drizzle better than Prisma? I am just wondering.
You can view benchmark tests here orm.drizzle.team/benchmarks
📦 Database Setup in 10 Seconds !
⚡ npx drizzle-setup