I recently tried Drizzle ORM, and honestly I thought it would be tough. But within minutes, I was writing schemas, connecting to the database, and running queries like I’d been using it for months.
Quick Setup Flow
The setup was surprisingly easy.
I used MySQL for my first test connected through drizzle-orm/mysql2, and everything just worked.
import { drizzle } from "drizzle-orm/mysql2";
import mysql from "mysql2/promise";
const connection = await mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
database: "test_db",
});
const db = drizzle(connection);
Once connected, I could define a schema instantly:
import { mysqlTable, serial, varchar, int } from "drizzle-orm/mysql-core";
export const users = mysqlTable("users", {
id: serial("id").primaryKey(),
name: varchar("name", { length: 255 }).notNull(),
age: int("age").default(18),
});
That’s it no magic, no complicated config files. Just clean, readable TypeScript.
MySQL Workbench vs. pgAdmin
Coming from PostgreSQL and pgAdmin, I found MySQL Workbench a bit dull. It’s functional, but not fun. Still, once Drizzle was connected, I didn’t need to spend much time inside Workbench Drizzle’s CLI and schema approach gave me full control right from VS Code.
Why Drizzle Feels Powerful
Compared to Prisma, Drizzle gives you more control. It doesn’t hide SQL from you it embraces it. You can write custom queries, joins, and still enjoy full TypeScript safety.
// Select with conditions
const adults = await db.select().from(users).where(eq(users.age, 18));
// Inner join example
const result = await db
.select({
user: users.name,
post: posts.title,
})
.from(users)
.innerJoin(posts, eq(users.id, posts.userId));
The generated SQL is clean and optimized, and the performance is impressive. For developers who care about what actually happens under the hood this is a huge plus.
Migrations Made Simple
Drizzle’s migration system is just as developer-friendly. You can generate and run migrations using the CLI:
npx drizzle-kit generate:mysql
npx drizzle-kit push:mysql
No heavy config, no hidden scripts. It’s straightforward and versioned cleanly perfect for teams or solo devs.
Next Step: PostgreSQL
I’m planning to connect PostgreSQL next and run some performance checks. From what I’ve seen, Drizzle’s Postgres adapter performs even better native joins, advanced query plans, and full SQL transparency.
If it handles as smoothly as MySQL, this might become my go-to ORM for new projects.
Final Thought
Drizzle feels light, transparent, and fast. It doesn’t try to abstract away SQL it makes it easier to love SQL again. If you’ve struggled with heavy ORMs before, Drizzle might just be the breath of fresh air you’ve been waiting for.