D1 Database
To interact with your D1 database from your Worker, you need to access it through the environment bindings provided to the Worker (env
).
A D1 binding has the type D1Database
, and supports a number of methods, as listed below.
Prepares a query statement to be later executed.
query
: String Required- The SQL query you wish to execute on the database.
- None.
-
D1 follows the SQLite convention ↗ for prepared statements parameter binding. Currently, D1 only supports Ordered (
?NNNN
) and Anonymous (?
) parameters. In the future, D1 will support named parameters as well.Syntax Type Description ?NNN
Ordered A question mark followed by a number NNN
holds a spot for theNNN
-th parameter.NNN
must be between1
andSQLITE_MAX_VARIABLE_NUMBER
?
Anonymous A question mark that is not followed by a number creates a parameter with a number one greater than the largest parameter number already assigned. If this means the parameter number is greater than SQLITE_MAX_VARIABLE_NUMBER
, it is an error. This parameter format is provided for compatibility with other database engines. But because it is easy to miscount the question marks, the use of this parameter format is discouraged. Programmers are encouraged to use one of the symbolic formats below or the?NNN
format above instead.To bind a parameter, use the
.bind
method.Order and anonymous examples:
D1 API supports static statements. Static statements are SQL statements where the variables have been hard coded. When writing a static statement, you manually type the variable within the statement string.
Example of a prepared statement with dynamically bound value:
Example of a static statement:
Sends multiple SQL statements inside a single call to the database. This can have a huge performance impact as it reduces latency from network round trips to D1. D1 operates in auto-commit. Our implementation guarantees that each statement in the list will execute and commit, sequentially, non-concurrently.
Batched statements are SQL transactions ↗. If a statement in the sequence fails, then an error is returned for that specific statement, and it aborts or rolls back the entire sequence.
To send batch statements, provide D1Database::batch
a list of prepared statements and get the results in the same order.
statements
: Array- An array of
D1PreparedStatement
s.
- An array of
results
: Array- An array of
D1Result
objects containing the results of theD1Database::prepare
statements. Each object is in the array position corresponding to the array position of the initialD1Database::prepare
statement within thestatements
. - Refer to
D1Result
for more information about this object.
- An array of
Example of return values
-
You can construct batches reusing the same prepared statement:
Executes one or more queries directly without prepared statements or parameter bindings.
query
: String Required- The SQL query statement without parameter binding.
D1ExecResult
: Object- The
count
property contains the number of executed queries. - The
duration
property contains the duration of operation in milliseconds.- Refer to
D1ExecResult
for more information.
- Refer to
- The
Example of return values
- If an error occurs, an exception is thrown with the query and error messages, execution stops and further statements are not executed. Refer to Errors to learn more.
- This method can have poorer performance (prepared statements can be reused in some cases) and, more importantly, is less safe.
- Only use this method for maintenance and one-shot tasks (for example, migration jobs).
- The input can be one or multiple queries separated by
\n
.
Dumps the entire D1 database to an SQLite compatible file inside an ArrayBuffer.
- None.
- None.