Drizzle ORM Setup
SQLocal provides a driver for Drizzle ORM so that you can use it to make fully typed queries against databases in your TypeScript codebase.
Install
Install the Drizzle ORM package alongside SQLocal in your application using your package manager.
npm install sqlocal drizzle-orm
yarn add sqlocal drizzle-orm
pnpm install sqlocal drizzle-orm
Initialize
SQLocal provides the Drizzle ORM driver from a child class of SQLocal
called SQLocalDrizzle
imported from sqlocal/drizzle
. This class has all the same methods as SQLocal
but adds driver
and batchDriver
which you pass to the drizzle
instance.
import { SQLocalDrizzle } from 'sqlocal/drizzle';
import { drizzle } from 'drizzle-orm/sqlite-proxy';
const { driver, batchDriver } = new SQLocalDrizzle('database.sqlite3');
export const db = drizzle(driver, batchDriver);
Now, any queries you run through this Drizzle instance will be executed against the database passed to SQLocalDrizzle
.
Define Schema
Define your schema using the functions that Drizzle ORM provides. You will need to import the table definitions where you will be making queries. See the Drizzle documentation.
import { sqliteTable, int, text } from 'drizzle-orm/sqlite-core';
export const groceries = sqliteTable('groceries', {
id: int('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull(),
});
Make Queries
Import your Drizzle instance to start making type-safe queries.
const data = await db
.select({ name: groceries.name, quantity: groceries.quantity })
.from(groceries)
.orderBy(groceries.name)
.all();
console.log(data);
See the Drizzle documentation for more examples.
Transactions
Drizzle's transaction
method cannot isolate transactions from outside queries. It is recommended to use the transaction
method of SQLocalDrizzle
instead. See the transaction
documentation.