---
title: "D1Database"
description: "A `Database` bound to Cloudflare D1."
url: "https://pitlane.tools/package/data-table-d1/class/D1Database"
---

# D1Database

```ts
import { D1Database } from "@pitlane/data-table-d1";
```

A `Database` bound to Cloudflare D1.

The same shape `SqliteDatabase` and `PostgresDatabase` have: a `Database` subclass that supplies its own driver, so every query, persistence and migration method comes from `remix/data-table` unchanged.

## Extends

- `Database`\<`"sqlite"`>

## Constructors

### Constructor

```ts
new D1Database(binding, options?): D1Database;
```

#### Parameters

##### binding

[`D1Binding`](https://pitlane.tools/package/data-table-d1/interface/D1Binding.md)

##### options?

[`D1DatabaseOptions`](https://pitlane.tools/package/data-table-d1/interface/D1DatabaseOptions.md)

#### Returns

`D1Database`

#### Overrides

```ts
Database<"sqlite">.constructor
```

## Accessors

### capabilities

#### Get Signature

```ts
get capabilities(): DatabaseCapabilities;
```

Immutable feature flags used by shared query and migration behavior.

##### Returns

`DatabaseCapabilities`

#### Inherited from

```ts
Database.capabilities
```

---

### dialect

#### Get Signature

```ts
get dialect(): dialect;
```

Stable identifier for the SQL dialect.

##### Returns

`dialect`

#### Inherited from

```ts
Database.dialect
```

## Methods

### batch()

```ts
batch(statements): Promise<D1BatchResult[]>;
```

Runs statements together, atomically.

D1 has no transactions, so `transaction()` refuses. `batch()` is what it offers instead, and this is it without reaching for the raw binding:

```ts
import { sql } from "remix/data-table";

await db.batch([
    sql`insert into post (title) values (${title})`,
    sql`update counter set posts = posts + 1`,
]);
```

The statements are `SqlStatement`s rather than query-builder calls, because `data-table` exposes no way to build an operation without running it. `sql` still parameterises the values.

#### Parameters

##### statements

`SqlStatement`\[\]

#### Returns

`Promise`\<[`D1BatchResult`](https://pitlane.tools/package/data-table-d1/interface/D1BatchResult.md)\[\]>

---

### close()

```ts
close(): Promise<void>;
```

Closes resources owned by this database.

#### Returns

`Promise`\<`void`>

A promise that resolves when owned resources have been released.

#### Inherited from

```ts
Database.close
```

---

### count()

```ts
count<table>(table, options?): Promise<number>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

#### Parameters

##### table

`table`

##### options?

`CountOptions`\<`table`>

#### Returns

`Promise`\<`number`>

#### Inherited from

```ts
Database.count
```

---

### create()

#### Call Signature

```ts
create<table>(
   table,
   values,
options?): Promise<WriteResult>;
```

##### Type Parameters

###### table

`table` _extends_ `AnyTable`

##### Parameters

###### table

`table`

###### values

`Partial`\<`TableRow`\<`table`>>

###### options?

`CreateResultOptions`

##### Returns

`Promise`\<`WriteResult`>

##### Inherited from

```ts
Database.create
```

#### Call Signature

```ts
create<table, relations>(
   table,
   values,
options): Promise<{ [key in string | number | symbol]: ({ [key in string]: { [column in string]: ColumnOutput<TableColumns<table>[column]> }[key] } & { [key in string | number | symbol]: { [name in string | number | symbol]: RelationResult<relations[name]> }[key] })[key] }>;
```

##### Type Parameters

###### table

`table` _extends_ `AnyTable`

###### relations

`relations` _extends_ `RelationMapForSourceName`\<`TableName`\<`table`>> = { }

##### Parameters

###### table

`table`

###### values

`Partial`\<`TableRow`\<`table`>>

###### options

`CreateRowOptions`\<`table`, `relations`>

##### Returns

`Promise`\<{ \[key in string | number | symbol\]: ({ \[key in string\]: { \[column in string\]: ColumnOutput\<TableColumns\<table>\[column\]> }\[key\] } \& { \[key in string | number | symbol\]: { \[name in string | number | symbol\]: RelationResult\<relations\[name\]> }\[key\] })\[key\] }>

##### Inherited from

```ts
Database.create
```

---

### createMany()

#### Call Signature

```ts
createMany<table>(
   table,
   values,
options?): Promise<WriteResult>;
```

##### Type Parameters

###### table

`table` _extends_ `AnyTable`

##### Parameters

###### table

`table`

###### values

`Partial`\<`{ [key in string]: { [column in string]: ColumnOutput<TableColumns<table>[column]> }[key] }`>\[\]

###### options?

`CreateManyResultOptions`

##### Returns

`Promise`\<`WriteResult`>

##### Inherited from

```ts
Database.createMany
```

#### Call Signature

```ts
createMany<table>(
   table,
   values,
options): Promise<{ [key in string]: { [column in string]: ColumnOutput<TableColumns<table>[column]> }[key] }[]>;
```

##### Type Parameters

###### table

`table` _extends_ `AnyTable`

##### Parameters

###### table

`table`

###### values

`Partial`\<`{ [key in string]: { [column in string]: ColumnOutput<TableColumns<table>[column]> }[key] }`>\[\]

###### options

`CreateManyRowsOptions`

##### Returns

`Promise`\<`{ [key in string]: { [column in string]: ColumnOutput<TableColumns<table>[column]> }[key] }`\[\]>

##### Inherited from

```ts
Database.createMany
```

---

### delete()

```ts
delete<table>(table, value): Promise<boolean>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

#### Parameters

##### table

`table`

##### value

`PrimaryKeyInput`\<`table`>

#### Returns

`Promise`\<`boolean`>

#### Inherited from

```ts
Database.delete
```

---

### deleteMany()

```ts
deleteMany<table>(table, options): Promise<WriteResult>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

#### Parameters

##### table

`table`

##### options

`DeleteManyOptions`\<`table`>

#### Returns

`Promise`\<`WriteResult`>

#### Inherited from

```ts
Database.deleteMany
```

---

### exec()

#### Call Signature

```ts
exec(statement, values?): Promise<DataManipulationResult>;
```

##### Parameters

###### statement

`string` | `SqlStatement`

###### values?

`unknown`\[\]

##### Returns

`Promise`\<`DataManipulationResult`>

##### Inherited from

```ts
Database.exec
```

#### Call Signature

```ts
exec<input>(input): Promise<QueryExecutionResult<input>>;
```

##### Type Parameters

###### input

`input` _extends_ `AnyQuery`

##### Parameters

###### input

`input`

##### Returns

`Promise`\<`QueryExecutionResult`\<`input`>>

##### Inherited from

```ts
Database.exec
```

---

### executeScript()

```ts
executeScript(sql): Promise<void>;
```

Executes a migration or raw multi-statement SQL script.

#### Parameters

##### sql

`string`

SQL script to execute.

#### Returns

`Promise`\<`void`>

A promise that resolves when execution completes.

#### Inherited from

```ts
Database.executeScript
```

---

### find()

```ts
find<table, relations>(
   table,
   value,
   options?): Promise<
  | { [key in string | number | symbol]: ({ [key in string]: { [column in string]: ColumnOutput<TableColumns<(...)>[column]> }[key] } & { [key in string | number | symbol]: { [name in string | number | symbol]: RelationResult<relations[name]> }[key] })[key] }
| null>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

##### relations

`relations` _extends_ `RelationMapForSourceName`\<`TableName`\<`table`>> = { }

#### Parameters

##### table

`table`

##### value

`PrimaryKeyInput`\<`table`>

##### options?

###### with?

`relations`

#### Returns

`Promise`\< | { \[key in string | number | symbol\]: ({ \[key in string\]: { \[column in string\]: ColumnOutput\<TableColumns\<(...)>\[column\]> }\[key\] } \& { \[key in string | number | symbol\]: { \[name in string | number | symbol\]: RelationResult\<relations\[name\]> }\[key\] })\[key\] } | `null`>

#### Inherited from

```ts
Database.find
```

---

### findMany()

```ts
findMany<table, relations>(table, options?): Promise<{ [key in string | number | symbol]: ({ [key in string]: { [column in string]: ColumnOutput<TableColumns<(...)>[column]> }[key] } & { [key in string | number | symbol]: { [name in string | number | symbol]: RelationResult<relations[name]> }[key] })[key] }[]>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

##### relations

`relations` _extends_ `RelationMapForSourceName`\<`TableName`\<`table`>> = { }

#### Parameters

##### table

`table`

##### options?

`FindManyOptions`\<`table`, `relations`>

#### Returns

`Promise`\<{ \[key in string | number | symbol\]: ({ \[key in string\]: { \[column in string\]: ColumnOutput\<TableColumns\<(...)>\[column\]> }\[key\] } \& { \[key in string | number | symbol\]: { \[name in string | number | symbol\]: RelationResult\<relations\[name\]> }\[key\] })\[key\] }\[\]>

#### Inherited from

```ts
Database.findMany
```

---

### findOne()

```ts
findOne<table, relations>(table, options): Promise<
  | { [key in string | number | symbol]: ({ [key in string]: { [column in string]: ColumnOutput<TableColumns<(...)>[column]> }[key] } & { [key in string | number | symbol]: { [name in string | number | symbol]: RelationResult<relations[name]> }[key] })[key] }
| null>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

##### relations

`relations` _extends_ `RelationMapForSourceName`\<`TableName`\<`table`>> = { }

#### Parameters

##### table

`table`

##### options

`FindOneOptions`\<`table`, `relations`>

#### Returns

`Promise`\< | { \[key in string | number | symbol\]: ({ \[key in string\]: { \[column in string\]: ColumnOutput\<TableColumns\<(...)>\[column\]> }\[key\] } \& { \[key in string | number | symbol\]: { \[name in string | number | symbol\]: RelationResult\<relations\[name\]> }\[key\] })\[key\] } | `null`>

#### Inherited from

```ts
Database.findOne
```

---

### hasColumn()

```ts
hasColumn(table, column): Promise<boolean>;
```

Reports whether a column exists on a table.

#### Parameters

##### table

`TableRef`

Table to inspect.

##### column

`string`

Column name to inspect.

#### Returns

`Promise`\<`boolean`>

A promise that resolves to `true` when the column exists.

#### Inherited from

```ts
Database.hasColumn
```

---

### hasTable()

```ts
hasTable(table): Promise<boolean>;
```

Reports whether a table exists.

#### Parameters

##### table

`TableRef`

Table to inspect.

#### Returns

`Promise`\<`boolean`>

A promise that resolves to `true` when the table exists.

#### Inherited from

```ts
Database.hasTable
```

---

### migrate()

```ts
migrate(migrations, options?): Promise<MigrateResult>;
```

Applies or reverts migrations in order.

#### Parameters

##### migrations

`Migrations`

Migration descriptors or registry to apply.

##### options?

`DatabaseMigrateOptions`

Migration direction, bound, dry-run, and journal configuration.

#### Returns

`Promise`\<`MigrateResult`>

The migrations applied or reverted by this run and their SQL scripts.

#### Inherited from

```ts
Database.migrate
```

---

### migrationStatus()

```ts
migrationStatus(migrations, options?): Promise<MigrationStatusEntry[]>;
```

Reports the current state of the provided migrations.

#### Parameters

##### migrations

`Migrations`

Migration descriptors or registry to inspect.

##### options?

`DatabaseMigrationStatusOptions`

Migration journal configuration.

#### Returns

`Promise`\<`MigrationStatusEntry`\[\]>

Status entries for the provided migrations.

#### Inherited from

```ts
Database.migrationStatus
```

---

### now()

```ts
now(): unknown;
```

#### Returns

`unknown`

#### Inherited from

```ts
Database.now
```

---

### query()

```ts
query<tableName, row, primaryKey>(table): Query<QueryTableInput<tableName, row, primaryKey>, { [key in string]: QueryColumnTypeMapFromRow<tableName, row>[key] }, row, {
}, BoundQueryPhase<"all">>;
```

#### Type Parameters

##### tableName

`tableName` _extends_ `string`

##### row

`row` _extends_ `Record`\<`string`, `unknown`>

##### primaryKey

`primaryKey` _extends_ readonly keyof `row` \& `string`\[\]

#### Parameters

##### table

`QueryTableInput`\<`tableName`, `row`, `primaryKey`>

#### Returns

`Query`\<`QueryTableInput`\<`tableName`, `row`, `primaryKey`>, `{ [key in string]: QueryColumnTypeMapFromRow<tableName, row>[key] }`, `row`, { }, `BoundQueryPhase`\<`"all"`>>

#### Inherited from

```ts
Database.query
```

---

### reset()

```ts
reset(options): Promise<void>;
```

Wipes the database, applies migrations, and optionally seeds data.

#### Parameters

##### options

`DatabaseResetOptions`

Migrations and optional seed function used to rebuild the database.

#### Returns

`Promise`\<`void`>

A promise that resolves when the database has been rebuilt.

#### Inherited from

```ts
Database.reset
```

---

### transaction()

```ts
transaction<result>(callback, options?): Promise<result>;
```

#### Type Parameters

##### result

`result`

#### Parameters

##### callback

(`database`: `Database`\<`"sqlite"`>) => `Promise`\<`result`>

##### options?

`TransactionOptions`

#### Returns

`Promise`\<`result`>

#### Inherited from

```ts
Database.transaction
```

---

### update()

```ts
update<table, relations>(
   table,
   value,
   changes,
options?): Promise<{ [key in string | number | symbol]: ({ [key in string]: { [column in string]: ColumnOutput<TableColumns<table>[column]> }[key] } & { [key in string | number | symbol]: { [name in string | number | symbol]: RelationResult<relations[name]> }[key] })[key] }>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

##### relations

`relations` _extends_ `RelationMapForSourceName`\<`TableName`\<`table`>> = { }

#### Parameters

##### table

`table`

##### value

`PrimaryKeyInput`\<`table`>

##### changes

`Partial`\<`TableRow`\<`table`>>

##### options?

`UpdateOptions`\<`table`, `relations`>

#### Returns

`Promise`\<{ \[key in string | number | symbol\]: ({ \[key in string\]: { \[column in string\]: ColumnOutput\<TableColumns\<table>\[column\]> }\[key\] } \& { \[key in string | number | symbol\]: { \[name in string | number | symbol\]: RelationResult\<relations\[name\]> }\[key\] })\[key\] }>

#### Inherited from

```ts
Database.update
```

---

### updateMany()

```ts
updateMany<table>(
   table,
   changes,
options): Promise<WriteResult>;
```

#### Type Parameters

##### table

`table` _extends_ `AnyTable`

#### Parameters

##### table

`table`

##### changes

`Partial`\<`TableRow`\<`table`>>

##### options

`UpdateManyOptions`\<`table`>

#### Returns

`Promise`\<`WriteResult`>

#### Inherited from

```ts
Database.updateMany
```

---

### wipe()

```ts
wipe(): Promise<void>;
```

Destructively recreates the configured database.

#### Returns

`Promise`\<`void`>

A promise that resolves when the database is ready for use.

#### Inherited from

```ts
Database.wipe
```
