INTEGRITY Документация

Запрос к базе данных

D1 совместим с большинством соглашений SQL в SQLite, поскольку использует движок запросов SQLite. Вы можете использовать команды SQL для запросов к D1.

Существует несколько способов взаимодействия с базой данных D1:

  1. Использование D1 Workers Binding API в коде.
  2. Использование D1 REST API.
  3. Использование Команды Wrangler для D1.

Использование SQL для запросов к D1

D1 поддерживает семантику SQLite, что позволяет выполнять запросы к базе данных с помощью операторов SQL через Workers Binding API или REST API (включая команды Wrangler). Подробнее см. в D1 SQL API чтобы узнать больше о поддерживаемых SQL-операторах.

Использование связей по внешнему ключу

При использовании SQL с D1 вы можете задать и применять ограничения внешнего ключа между таблицами базы данных. Они позволяют устанавливать связи между таблицами или запрещать удаление строк, на которые ссылаются строки в других таблицах. Пример связи по внешнему ключу приведен ниже.

CREATE TABLE users (
    user_id INTEGER PRIMARY KEY,
    email_address TEXT,
    name TEXT,
    metadata TEXT
)

CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY,
    status INTEGER,
    item_desc TEXT,
    shipped_date INTEGER,
    user_who_ordered INTEGER,
    FOREIGN KEY(user_who_ordered) REFERENCES users(user_id)
)

См. Определение внешних ключей, где это описано подробнее.

Запрос JSON

D1 позволяет запрашивать и разбирать данные JSON, хранящиеся в базе данных. Например, можно извлечь значение из объекта JSON.

При следующем объекте JSON (type:blob) в столбце с именем sensor_reading, вы можете напрямую извлекать из него значения.

{
    "measurement": {
        "temp_f": "77.4",
        "aqi": [21, 42, 58],
        "o3": [18, 500],
        "wind_mph": "13",
        "location": "US-NY"
    }
}
-- Extract the temperature value
SELECT json_extract(sensor_reading, '$.measurement.temp_f')-- returns "77.4" as TEXT

См. Запрос JSON чтобы узнать больше о запросах к объектам JSON.

Запрос к D1 через Workers Binding API

Workers Binding API работает преимущественно с data plane и позволяет выполнять запросы к базе данных D1 из вашего Worker.

Для этого необходимо:

  1. Привяжите базу данных D1 к своему Worker.
  2. Подготовьте оператор.
  3. Выполните оператор.
index.js
export default {
    async fetch(request, env) {
        const {pathname} = new URL(request.url);
        const companyName1 = `Bs Beverages`;
        const companyName2 = `Around the Horn`;
        const stmt = env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`);

        if (pathname === `/RUN`) {
            const returnValue = await stmt.bind(companyName1).run();
            return Response.json(returnValue);
        }

        return new Response(
            `Welcome to the D1 API Playground!
						\nChange the URL to test the various methods inside your index.js file.`,
        );
    },
};

См. Workers Binding API, где это описано подробнее.

Запрос к D1 через REST API

REST API взаимодействует прежде всего с плоскостью управления и позволяет создавать базу данных D1 и управлять ею.

См. D1 REST API документацию REST API D1.

Запрос к D1 с помощью команд Wrangler

Для запросов к базе данных D1 можно использовать команды Wrangler. Обратите внимание, что команды Wrangler используют для своих операций REST API.

npx wrangler d1 execute prod-d1-tutorial --command="SELECT * FROM Customers"
🌀 Mapping SQL input into an array of statements
🌀 Executing on local database production-db-backend (<DATABASE_ID>) from .wrangler/state/v3/d1:
┌────────────┬─────────────────────┬───────────────────┐
│ CustomerId │ CompanyName         │ ContactName       │
├────────────┼─────────────────────┼───────────────────┤
│ 1          │ Alfreds Futterkiste │ Maria Anders      │
├────────────┼─────────────────────┼───────────────────┤
│ 4          │ Around the Horn     │ Thomas Hardy      │
├────────────┼─────────────────────┼───────────────────┤
│ 11         │ Bs Beverages        │ Victoria Ashworth │
├────────────┼─────────────────────┼───────────────────┤
│ 13         │ Bs Beverages        │ Random Name       │
└────────────┴─────────────────────┴───────────────────┘