sqlite
Этот модуль добавлен в Deno v2.2.
Модуль node:sqlite упрощает работу с базами данных SQLite. Чтобы получить к нему доступ:
import sqlite from 'node:sqlite';
Этот модуль доступен только по схеме node:. Следующий код не будет работать:
import sqlite from 'sqlite';
В следующем примере показано базовое использование модуля node:sqlite для открытия базы данных в памяти, записи данных в базу, а затем их чтения.
import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');
// Execute SQL statements from strings.
database.exec(`
CREATE TABLE data(
key INTEGER PRIMARY KEY,
value TEXT
) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]
Использование в Deno
import * as mod from "node:sqlite";
класс DatabaseSync
Использование в Deno
import { DatabaseSync } from "node:sqlite";
Этот класс представляет собой одно подключение к базе данных SQLite. Все API, предоставляемые этим классом, выполняются синхронно.
Конструкторы
DatabaseSync(
location: string,
options?: DatabaseSyncOptions,
) Создаёт новый экземпляр DatabaseSync.
Методы
applyChangeset(
changeset: Uint8Array,
options?: ApplyChangesetOptions,
): boolean Если база данных не открыта, возникает исключение. Этот метод является обёрткой над sqlite3changeset_apply().
const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');
sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
const session = sourceDb.createSession();
const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');
const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb.
close(): void Закрывает подключение к базе данных. Если база данных не открыта, возникает исключение. Этот метод является обёрткой над sqlite3_close_v2().
createSession(options?: CreateSessionOptions): Session Создаёт сеанс и подключает его к базе данных. Этот метод является обёрткой над sqlite3session_create() и sqlite3session_attach().
enableLoadExtension(allow: boolean): void Включает или отключает функцию SQL loadExtension и метод loadExtension(). Если при создании allowExtension имеет значение false, загрузку расширений нельзя включить по соображениям безопасности.
exec(sql: string): void Этот метод позволяет выполнить один или несколько операторов SQL без возврата результатов. Он полезен при выполнении операторов SQL, прочитанных из файла. Этот метод является обёрткой над sqlite3_exec().
function(
name: string,
options: FunctionOptions,
func: (...args: SupportedValueType[]) => SupportedValueType,
): void Этот метод используется для создания пользовательских функций SQLite. Этот метод является обёрткой над sqlite3_create_function_v2().
function(
name: string,
func: (...args: SupportedValueType[]) => SupportedValueType,
): void loadExtension(path: string): void Загружает общую библиотеку в подключение к базе данных. Этот метод является обёрткой над sqlite3_load_extension(). При создании экземпляра DatabaseSync необходимо включить параметр allowExtension.
open(): void Открывает базу данных, указанную в аргументе location конструктора DatabaseSync. Этот метод следует использовать только в том случае, если база данных не открывается конструктором. Если база данных уже открыта, возникает исключение.
prepare(sql: string): StatementSync Компилирует оператор SQL в подготовленный оператор. Этот метод является обёрткой над sqlite3_prepare_v2().
класс StatementSync
Использование в Deno
import { StatementSync } from "node:sqlite";
Этот класс представляет собой один подготовленный оператор. Экземпляр этого класса нельзя создать с помощью его конструктора. Вместо этого экземпляры создаются с помощью метода database.prepare(). Все API, предоставляемые этим классом, выполняются синхронно.
Подготовленный оператор — это эффективное двоичное представление SQL-кода, использованного для его создания. В подготовленные операторы можно подставлять параметры, и их можно выполнять несколько раз с различными связанными значениями. Параметры также обеспечивают защиту от атак типа SQL-инъекция. По этим причинам при обработке пользовательского ввода предпочтительнее использовать подготовленные операторы, а не сформированные вручную строки SQL.
Конструкторы
StatementSync() Свойства
expandedSQL: string Исходный текст SQL подготовленного оператора, в котором заполнители параметров заменены значениями, использованными при последнем выполнении этого подготовленного оператора. Это свойство является обёрткой над sqlite3_expanded_sql().
sourceSQL: string Исходный текст SQL подготовленного оператора. Это свойство является обёрткой над sqlite3_sql().
Методы
all(...anonymousParameters: SQLInputValue[]): Record<string, SQLOutputValue>[] Этот метод выполняет подготовленный оператор и возвращает все результаты в виде массива объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой массив. Значения параметров подготовленного оператора связываются с использованием значений из namedParameters и anonymousParameters.
all(
namedParameters: Record<string, SQLInputValue>,
...anonymousParameters: SQLInputValue[],
): Record<string, SQLOutputValue>[] get(...anonymousParameters: SQLInputValue[]): Record<string, SQLOutputValue> | undefined Этот метод выполняет подготовленный оператор и возвращает первый результат в виде объекта. Если подготовленный оператор не возвращает результатов, метод возвращает undefined. Значения параметров подготовленного оператора связываются с использованием значений из namedParameters и anonymousParameters.
get(
namedParameters: Record<string, SQLInputValue>,
...anonymousParameters: SQLInputValue[],
): Record<string, SQLOutputValue> | undefined iterate(...anonymousParameters: SQLInputValue[]): Iterator<Record<string, SQLOutputValue>> Этот метод выполняет подготовленный оператор и возвращает итератор объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой итератор. Значения параметров подготовленного оператора связываются с использованием значений из namedParameters и anonymousParameters.
iterate(
namedParameters: Record<string, SQLInputValue>,
...anonymousParameters: SQLInputValue[],
): Iterator<Record<string, SQLOutputValue>> run(...anonymousParameters: SQLInputValue[]): StatementResultingChanges Этот метод выполняет подготовленный оператор и возвращает объект со сводной информацией об изменениях. Значения параметров подготовленного оператора связываются с использованием значений из namedParameters и anonymousParameters.
run(
namedParameters: Record<string, SQLInputValue>,
...anonymousParameters: SQLInputValue[],
): StatementResultingChanges setAllowBareNamedParameters(enabled: boolean): void Имена параметров SQLite начинаются с символа-префикса. По умолчанию node:sqlite требует наличия этого символа-префикса при связывании параметров. Однако, за исключением знака доллара, при использовании этих символов-префиксов в ключах объектов также требуется дополнительное экранирование.
Для удобства этот метод позволяет использовать также именованные параметры без префикса, для которых в коде JavaScript не требуется символ-префикс. При включении именованных параметров без префикса следует учитывать несколько особенностей:
- В SQL символ-префикс по-прежнему обязателен.
- В JavaScript символ-префикс по-прежнему разрешён. Более того, связывание параметров с именами, содержащими префикс, будет немного эффективнее.
- Использование неоднозначных именованных параметров, таких как
$kи@k, в одном подготовленном операторе приведёт к исключению, поскольку определить, как связать имя без префикса, будет невозможно.
setReadBigInts(enabled: boolean): void При чтении из базы данных значения INTEGER SQLite по умолчанию преобразуются в числа JavaScript. Однако значения INTEGER SQLite могут быть больше чисел, которые способны представить числа JavaScript. В таких случаях этот метод позволяет читать данные типа INTEGER с помощью значений BigInt JavaScript. Этот метод не влияет на операции записи в базу данных, где числа и BigInt поддерживаются всегда.
интерфейс ApplyChangesetOptions
Использование в Deno
import { type ApplyChangesetOptions } from "node:sqlite";
Свойства
filter: ((tableName: string) => boolean) | undefined Пропускает изменения, для которых при передаче имени целевой таблицы этой функции возвращается истинное значение. По умолчанию предпринимается попытка применить все изменения.
onConflict: ((conflictType: number) => number) | undefined Функция, определяющая способ обработки конфликтов. Функция получает один аргумент, который может иметь одно из следующих значений:
-
SQLITE_CHANGESET_DATA: изменениеDELETEилиUPDATEне содержит ожидаемых значений «до». -
SQLITE_CHANGESET_NOTFOUND: строка, соответствующая первичному ключу измененияDELETEилиUPDATE, не существует. -
SQLITE_CHANGESET_CONFLICT: изменениеINSERTприводит к дублированию первичного ключа. -
SQLITE_CHANGESET_FOREIGN_KEY: применение изменения приведёт к нарушению внешнего ключа. -
SQLITE_CHANGESET_CONSTRAINT: применение изменения приводит к нарушению ограниченияUNIQUE,CHECKилиNOT NULL.
Функция должна возвращать одно из следующих значений:
-
SQLITE_CHANGESET_OMIT: пропустить конфликтующие изменения. -
SQLITE_CHANGESET_REPLACE: заменить существующие значения конфликтующими изменениями (допустимо только для конфликтовSQLITE_CHANGESET_DATAилиSQLITE_CHANGESET_CONFLICT). -
SQLITE_CHANGESET_ABORT: прервать выполнение при конфликте и выполнить откат базы данных.
Если обработчик конфликтов выбрасывает ошибку или возвращает любое другое значение, применение набора изменений прерывается и выполняется откат базы данных.
По умолчанию: функция, возвращающая SQLITE_CHANGESET_ABORT.
интерфейс CreateSessionOptions
Использование в Deno
import { type CreateSessionOptions } from "node:sqlite";
Свойства
table: string | undefined Конкретная таблица, изменения в которой нужно отслеживать. По умолчанию отслеживаются изменения во всех таблицах.
db: string | undefined Имя отслеживаемой базы данных. Это полезно, если с помощью ATTACH DATABASE было добавлено несколько баз данных.
интерфейс DatabaseSyncOptions
Использование в Deno
import { type DatabaseSyncOptions } from "node:sqlite";
Свойства
open: boolean | undefined Если true, база данных открывается конструктором. Если это значение равно false, базу данных необходимо открыть с помощью метода open().
enableForeignKeyConstraints: boolean | undefined Если true, ограничения внешних ключей включены. Это рекомендуется, однако для совместимости с устаревшими схемами баз данных эту возможность можно отключить. Проверку ограничений внешних ключей можно включить и отключить после открытия базы данных с помощью PRAGMA foreign_keys.
enableDoubleQuotedStringLiterals: boolean | undefined Если true, SQLite принимает строковые литералы в двойных кавычках. Это не рекомендуется, однако эту возможность можно включить для совместимости с устаревшими схемами баз данных.
readOnly: boolean | undefined Если true, база данных открывается в режиме только для чтения. Если база данных не существует, открыть её не удастся.
allowExtension: boolean | undefined Если true, включаются функция SQL loadExtension и метод loadExtension(). Позже можно вызвать enableLoadExtension(false), чтобы отключить эту возможность.
интерфейс FunctionOptions
Использование в Deno
import { type FunctionOptions } from "node:sqlite";
Свойства
deterministic: boolean | undefined Если true, для созданной функции устанавливается флаг SQLITE_DETERMINISTIC.
directOnly: boolean | undefined Если true, для созданной функции устанавливается флаг SQLITE_DIRECTONLY.
useBigIntArguments: boolean | undefined Если true, целочисленные аргументы function преобразуются в значения BigInt. Если false, целочисленные аргументы передаются как числа JavaScript.
varargs: boolean | undefined Если true, function может принимать переменное число аргументов. Если false, function необходимо вызывать ровно с function.length аргументами.
интерфейс Session
Использование в Deno
import { type Session } from "node:sqlite";
Методы
changeset(): Uint8Array Получает набор изменений, содержащий все изменения с момента его создания. Метод можно вызывать несколько раз. Если база данных или сеанс не открыты, возникает исключение. Этот метод является обёрткой над sqlite3session_changeset().
patchset(): Uint8Array Аналогичен описанному выше методу, но создаёт более компактный набор исправлений. См. раздел «Наборы изменений и наборы исправлений» в документации SQLite. Если база данных или сеанс не открыты, возникает исключение. Этот метод является обёрткой над sqlite3session_patchset().
close(): void Закрывает сеанс. Если база данных или сеанс не открыты, возникает исключение. Этот метод является обёрткой над sqlite3session_delete().
интерфейс StatementResultingChanges
Использование в Deno
import { type StatementResultingChanges } from "node:sqlite";
Свойства
changes: number | bigint Количество строк, изменённых, добавленных или удалённых последним завершённым оператором INSERT, UPDATE или DELETE. Это поле содержит число или BigInt — в зависимости от конфигурации подготовленного оператора. Значение этого свойства соответствует результату sqlite3_changes64().
lastInsertRowid: number | bigint Идентификатор последней вставленной строки (rowid). Это поле содержит число или BigInt — в зависимости от конфигурации подготовленного оператора. Значение этого свойства соответствует результату sqlite3_last_insert_rowid().
пространство имён constants
Использование в Deno
import { constants } from "node:sqlite";
Переменные
Прервать выполнение при конфликте изменений и выполнить откат базы данных.
Эта константа передаётся обработчику конфликтов при обработке изменения INSERT, если операция приведёт к дублированию значений первичного ключа.
Обработчик конфликтов вызывается с этой константой при обработке изменения DELETE или UPDATE, если в базе данных присутствует строка с необходимыми полями PRIMARY KEY, но одно или несколько других полей (не являющихся первичным ключом), изменённых при обновлении, содержат значения, не соответствующие ожидаемым значениям «до».
Если обработка внешних ключей включена и применение набора изменений оставляет базу данных в состоянии с нарушениями ограничений внешних ключей, обработчик конфликтов вызывается с этой константой ровно один раз до фиксации набора изменений. Если обработчик конфликтов возвращает SQLITE_CHANGESET_OMIT, изменения, в том числе вызвавшие нарушение ограничения внешнего ключа, фиксируются. Если же он возвращает SQLITE_CHANGESET_ABORT, набор изменений откатывается.
Обработчик конфликтов вызывается с этой константой при обработке изменения DELETE или UPDATE, если в базе данных отсутствует строка с необходимыми полями PRIMARY KEY.
Конфликтующие изменения пропускаются.
Конфликтующие изменения заменяют существующие значения. Обратите внимание, что это значение может быть возвращено, только если тип конфликта — SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT.
псевдоним типа SQLInputValue
Использование в Deno
import { type SQLInputValue } from "node:sqlite";
Этот модуль добавлен в Deno v2.2.
Модуль node:sqlite упрощает работу с базами данных SQLite. Чтобы получить к нему доступ:
import sqlite from 'node:sqlite';
Этот модуль доступен только по схеме node:. Следующий вариант не будет работать:
import sqlite from 'sqlite';
В следующем примере показано базовое использование модуля node:sqlite для открытия базы данных в памяти, записи данных в неё и последующего чтения этих данных.
import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');
// Execute SQL statements from strings.
database.exec(`
CREATE TABLE data(
key INTEGER PRIMARY KEY,
value TEXT
) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]
Определение
null
| number
| bigint
| string
| ArrayBufferView
См. также
псевдоним типа SQLOutputValue
Использование в Deno
import { type SQLOutputValue } from "node:sqlite";
Определение
null
| number
| bigint
| string
| Uint8Array
псевдоним типа SupportedValueType
Использование в Deno
import { type SupportedValueType } from "node:sqlite";
Вместо этого используйте SQLInputValue или SQLOutputValue.
Определение
переменная constants.SQLITE_CHANGESET_ABORT
Использование в Deno
import { constants } from "node:sqlite";
Прервать выполнение при конфликте изменений и выполнить откат базы данных.
Тип
number переменная constants.SQLITE_CHANGESET_CONFLICT
Использование в Deno
import { constants } from "node:sqlite";
Эта константа передаётся обработчику конфликтов при обработке изменения INSERT, если операция приведёт к дублированию значений первичного ключа.
Тип
number переменная constants.SQLITE_CHANGESET_DATA
Использование в Deno
import { constants } from "node:sqlite";
Обработчик конфликтов вызывается с этой константой при обработке изменения DELETE или UPDATE, если в базе данных присутствует строка с необходимыми полями PRIMARY KEY, но одно или несколько других полей (не являющихся первичным ключом), изменённых при обновлении, содержат значения, не соответствующие ожидаемым значениям «до».
Тип
number переменная constants.SQLITE_CHANGESET_FOREIGN_KEY
Использование в Deno
import { constants } from "node:sqlite";
Если обработка внешних ключей включена и применение набора изменений оставляет базу данных в состоянии с нарушениями ограничений внешних ключей, обработчик конфликтов вызывается с этой константой ровно один раз до фиксации набора изменений. Если обработчик конфликтов возвращает SQLITE_CHANGESET_OMIT, изменения, в том числе вызвавшие нарушение ограничения внешнего ключа, фиксируются. Если же он возвращает SQLITE_CHANGESET_ABORT, набор изменений откатывается.
Тип
number переменная constants.SQLITE_CHANGESET_NOTFOUND
Использование в Deno
import { constants } from "node:sqlite";
Обработчик конфликтов вызывается с этой константой при обработке изменения DELETE или UPDATE, если в базе данных отсутствует строка с необходимыми полями PRIMARY KEY.
Тип
number переменная constants.SQLITE_CHANGESET_OMIT
Использование в Deno
import { constants } from "node:sqlite";
Конфликтующие изменения пропускаются.
Тип
number переменная constants.SQLITE_CHANGESET_REPLACE
Использование в Deno
import { constants } from "node:sqlite";
Конфликтующие изменения заменяют существующие значения. Обратите внимание, что это значение может быть возвращено, только если тип конфликта — SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT.
Тип
number
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/sqlite