Skip to main content

D1 Admin SDK

Use the Admin SDK when your backend needs to run SQL against a declared D1 database.

This wrapper exposes plain SQL execution. If you enable D1 read replication and need explicit Sessions API behavior, drop down to lower-level Workers D1 bindings in custom Worker code today.

Available Methods

MethodPurpose
exec(sql, params?)Run a SQL statement and return result rows

Some SDKs also expose query(...) as a convenience alias for exec(...), but exec(...) is the cross-SDK baseline shown in this guide.

Language Method Matrix

Use exec(...) as the safe cross-SDK mental model. Where query(...) exists, it is just an alias with the same behavior.

LanguageMethodsNotes
TypeScript / JavaScriptexec, queryquery(...) is an alias
Dartexec, queryquery(...) is an alias
Kotlinexecsuspend method
JavaexecOverloads for with/without params
ScalaexecScala wrapper around Java admin SDK
Pythonexec, queryquery(...) is an alias
GoExec, QueryQuery(...) is an alias
PHPexec, queryquery(...) is an alias
Rustexec, queryquery(...) is an alias
C#ExecAsyncNo separate alias today
Rubyexec, queryquery is an alias of exec
Elixirexec, exec!exec! unwraps {:ok, ...}
import { createAdminClient } from '@edge-base/admin';

const admin = createAdminClient('https://your-app.example.com', {
serviceKey: process.env.EDGEBASE_SERVICE_KEY!,
});

const rows = await admin.d1('analytics').exec(
'SELECT event, COUNT(*) as cnt FROM events WHERE ts > ? GROUP BY event',
['2026-01-01']
);

Delete Rows

D1 does not have a separate delete helper because this wrapper exposes plain SQL. Use exec(...) with standard DELETE statements when you need cleanup or retention jobs.

await admin.d1('analytics').exec(
'DELETE FROM events WHERE created_at < ?',
['2025-01-01']
);

The same exec(...) entrypoint also covers INSERT, UPDATE, and schema-management queries.