Перейти к содержимому

Модули баз данных

Встроенные модули SQLite, PostgreSQL и MySQL

На этой странице
Open in ChatGPTOpen in Claude

Elide предоставляет три модуля SQL:

МодульТочка входаМодель подключения
SQLiteelide:sqliteВстроенная и синхронная
PostgreSQLelide:postgresСетевое подключение и API на промисах
MySQLelide:mysqlСетевое подключение и API на промисах

Глобального объекта Elide.db нет. Импортируйте нужный драйвер.

SQLite

import { Database } from "elide:sqlite";

const db = new Database();
try {
  db.exec("CREATE TABLE checks (ok INTEGER)");
  db.exec("INSERT INTO checks VALUES (1)");

  console.log(db.query("SELECT ok FROM checks").get());
  // { ok: 1 }
} finally {
  db.close();
}

new Database() и new Database(":memory:") создают базу данных в памяти. Путь открывает базу данных в файле. Экземпляр предоставляет query, prepare, exec, transaction, loadExtension, serialize и close.

Выражение предоставляет all(), values(), get() и run(). Каждый метод принимает позиционные (?, ?1) или именованные ($name) параметры:

import { Database } from "elide:sqlite";

const db = new Database();
db.exec("CREATE TABLE users (name TEXT, age INTEGER)");
db.prepare("INSERT INTO users VALUES (?, ?)").run("Ada", 36);
db.prepare("INSERT INTO users VALUES ($name, $age)").run({ $name: "Alan", $age: 41 });
console.log(db.prepare("SELECT name FROM users WHERE age > ?").all(40));
// [{name: "Alan"}]
db.close();

Транзакции оборачивают синхронную функцию обратного вызова:

import { Database } from "elide:sqlite";

const db = new Database();
try {
  db.exec("CREATE TABLE checks (ok INTEGER)");
  const insert = db.transaction(() => {
    db.exec("INSERT INTO checks VALUES (1)");
  });

  insert();
  console.log(db.query("SELECT COUNT(*) AS count FROM checks").get());
  // { count: 1 }
} finally {
  db.close();
}

PostgreSQL и MySQL

Оба сетевых драйвера предоставляют фабрику Database с методом connect:

import { Database } from "elide:postgres";

const db = await Database.connect({
  host: "127.0.0.1",
  port: 5432,
  database: "app",
  user: "app",
  password: process.env.DB_PASSWORD,
});

await db.close();

Для MySQL используйте elide:mysql и порт 3306. Объект конфигурации требует database, user и password. Поведение подключения и запросов требует работающего сервера баз данных, и его следует проверять на той версии сервера и конфигурации, которые использует ваше приложение.

См. также

Была ли эта страница полезной?