Having Trouble Getting D1 to Work in Local Development with Drizzle ORM?

Everything works fine when I run drizzle migrate or use Drizzle Studio. Oddly enough, D1 also works perfectly after deploying to a Worker. However, it doesn't function in local development mode. For context, I'm using React Router v7 along with the Wrangler Vite plugin. Any ideas or suggestions would be greatly appreciated! Here is my wrangler.jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "play-football",
"compatibility_date": "2025-04-04",
"compatibility_flags": [
"nodejs_compat"
],
"main": "./workers/app.ts",
"observability": {
"enabled": true
},
"vars": {
"CLOUDFLARE_ACCOUNT_ID": "your_account_id",
"CLOUDFLARE_DATABASE_ID": "your_database_id",
"CLOUDFLARE_D1_TOKEN": "your_d1_token"
},
"d1_databases": [
{
"binding": "DB",
"database_name": "example-db",
"database_id": "omitted",
"migrations_dir": "drizzle"
}
]
}
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "play-football",
"compatibility_date": "2025-04-04",
"compatibility_flags": [
"nodejs_compat"
],
"main": "./workers/app.ts",
"observability": {
"enabled": true
},
"vars": {
"CLOUDFLARE_ACCOUNT_ID": "your_account_id",
"CLOUDFLARE_DATABASE_ID": "your_database_id",
"CLOUDFLARE_D1_TOKEN": "your_d1_token"
},
"d1_databases": [
{
"binding": "DB",
"database_name": "example-db",
"database_id": "omitted",
"migrations_dir": "drizzle"
}
]
}
.dev.vars / .env
CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_DATABASE_ID=
CLOUDFLARE_D1_TOKEN=
CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_DATABASE_ID=
CLOUDFLARE_D1_TOKEN=
Here is my api code.
import { drizzle } from 'drizzle-orm/d1';

export async function getDB(env: Env) {
const db = drizzle(env.DB);
return db;
};

export async function loader({ params, context }: Route.LoaderArgs) {
const db = await getDB(context.cloudflare.env);
const result = await db.select().from(users).all();

return Response.json({
users: result,
});
}
import { drizzle } from 'drizzle-orm/d1';

export async function getDB(env: Env) {
const db = drizzle(env.DB);
return db;
};

export async function loader({ params, context }: Route.LoaderArgs) {
const db = await getDB(context.cloudflare.env);
const result = await db.select().from(users).all();

return Response.json({
users: result,
});
}
No description
3 Replies
Viktor
Viktor3d ago
Does querying your database without drizzle work?
const result = await env.DB.prepare(
"SELECT * FROM users;",
).run();
const result = await env.DB.prepare(
"SELECT * FROM users;",
).run();
Did you setup your local database? npx wrangler d1 create DB —local It seems lile drizzle did not or could not init your database. (Written on my phone, code untestet)
olafg
olafg2d ago
Afaik Drizzle doesn't support loading the local sqlite db that is created by Wrangler. I had to implement something similar to what is discussed here: https://github.com/drizzle-team/drizzle-orm/discussions/1545
GitHub
How can I use Drizzle Studio with Cloudflare D1 in local environmen...
I am using Drizzle and Cloudflare D1 in my project and I like Drizzle a lot. And while I was trying Drizzle Studio, I found it connected to live database instead of local dev environment. I'd l...
thenasim
thenasimOP2d ago
Directly querying also did not work. Getting the same error. Well that's interesting, I will try it myself, thanks for the Help

Did you find this page helpful?