Пропустить до содержимого

@astrojs/ db

Astro DB - это полностью управляемая база данных SQL, разработанная для экосистемы Astro: разрабатывайте локально в Astro и развертывайте из вашей панели управления Astro Studio.

С Astro DB у вас есть мощное, локальное, типобезопасное средство для запросов и моделирования контента в виде реляционной базы данных. Просматривайте, управляйте и развертывайте свои удаленные хостинговые данные через вашу интерактивную панель управления Studio.

См. руководство по Astro DB для полного описания использования и примеров.

Astro включает команду astro add для автоматизации установки официальных интеграций. При желании вы также можете установить интеграции вручную.

Запустите одну из следующих команд в новом окне терминала.

Terminal window
npx astro add db

Если вы предпочитаете устанавливать все с нуля самостоятельно, пропустите astro add и следуйте этим инструкциям, чтобы установить Astro DB самостоятельно.

1. Установите интеграцию из npm с помощью менеджера пакетов
Заголовок раздела 1. Установите интеграцию из npm с помощью менеджера пакетов
Terminal window
npm install @astrojs/db
astro.config.mjs
import { defineConfig } from 'astro/config';
import db from '@astrojs/db';
export default defineConfig({
integrations: [
db()
]
});

Создайте файл db/config.ts в корне вашего проекта. Это специальный файл, который Astro будет автоматически загружать и использовать для настройки таблиц вашей базы данных.

db/config.ts
import { defineDb } from 'astro:db';
export default defineDb({
tables: {},
})

Столбцы таблицы настраиваются с использованием объекта columns:

import { defineTable, column, NOW } from 'astro:db';
const Comment = defineTable({
columns: {
id: column.number({ primaryKey: true }),
author: column.text(),
content: column.text({ optional: true }),
published: column.date({ default: NOW }),
},
});

Столбцы настраиваются с использованием утилиты column. column поддерживает следующие типы:

  • column.text(...) - храните простой или разнообразный текстовый контент
  • column.number(...) - храните целочисленные и числовые значения с плавающей запятой
  • column.boolean(...) - храните значения true / false
  • column.date(...) - храните объекты Date, разобранные как строковые значения ISO для хранения данных
  • column.json(...) - храните произвольные JSON-объекты, разобранные как строковые JSON для хранения данных

Есть несколько общих значений конфигурации для всех столбцов:

  • primaryKey - Установите столбец типа number или text как уникальный идентификатор.
  • optional - По умолчанию Astro DB использует NOT NULL для всех столбцов. Установите optional в true, чтобы разрешить значения null.
  • default - Установите значение по умолчанию для новых записей. Это принимает либо статическое значение, либо строку sql для сгенерированных значений, таких как метки времени.
  • unique - Пометьте столбец как уникальный. Это предотвращает дублирование значений в таблице.
  • references - Ссылка на связанную таблицу по столбцу. Это создает ограничение внешнего ключа, что означает, что каждое значение столбца должно иметь соответствующее значение в ссылочной таблице.

Индексы таблиц используются для повышения скорости поиска по заданному столбцу или комбинации столбцов. Свойство indexes принимает объект с уникальным именем индекса в качестве ключа:

db/config.ts
import { defineTable, column } from 'astro:db';
const Comment = defineTable({
authorId: column.number(),
body: column.text(),
indexes: {
author_idx: { on: ['authorId'], unique: true },
}
});

Для каждого индекса доступны следующие параметры конфигурации:

  • on: string | string[] - Один столбец или массив имен столбцов для индексации.
  • unique: boolean - Установите значение true для обеспечения уникальности значений в индексируемых столбцах.

Внешние ключи используются для установления связи между двумя таблицами. Свойство foreignKeys принимает массив объектов конфигурации, которые могут связывать один или несколько столбцов между таблицами:

db/config.ts
import { defineTable, column } from 'astro:db';
const Author = defineTable({
firstName: column.text(),
lastName: column.text(),
});
const Comment = defineTable({
authorFirstName: column.text(),
authorLastName: column.text(),
body: column.text(),
foreignKeys: [
{
columns: ['authorFirstName', 'authorLastName'],
references: () => [
Author.columns.firstName,
Author.columns.lastName
],
},
]
});

Каждый объект конфигурации внешнего ключа принимает следующие свойства:

  • columns: string[] - Массив имен столбцов для связи со ссылающейся таблицей.
  • references: () => Column[] - Функция, возвращающая массив столбцов из таблицы, на которую ссылается объект.

Astro DB включает в себя набор команд CLI для взаимодействия с базой данных вашего проекта на хостинге и учетной записью Astro Studio.

Эти команды вызываются автоматически при использовании действия GitHub CI, а также могут быть вызваны вручную с помощью CLI astro db.

Флаги:

  • --force-reset Сбросьте все производственные данные, если требуется изменение структуры данных.

Безопасно отправьте изменения конфигурации базы данных в вашу проектную базу данных. Это проверит наличие риска потери данных и поможет вам с любыми рекомендуемыми шагами миграции. Если необходимо сделать изменение структуры данных, используйте флаг --force-reset, чтобы сбросить все производственные данные.

Проверьте, нет ли различий между конфигурациями локальной и удаленной баз данных. Эта проверка выполняется автоматически при запуске astro db push. verify сравнит ваш локальный файл db/config.ts с удаленной базой данных и предупредит, если будут обнаружены изменения.

Флаги:

  • --remote Выполнить в вашей проектной базе данных Studio. Не указывайте для запуска на вашем сервере разработки.

Выполняет файл .ts или .js для чтения или записи в вашу базу данных. Принимает путь к файлу в качестве аргумента и поддерживает использование модуля astro:db для написания безопасных для типов запросов. Используйте флаг --remote для запуска с базой данных проекта Studio, или опустите этот флаг для запуска с сервером разработки. Пример файла см. в разделе заполнить данные разработки.

Флаги:

  • --query Сырой SQL-запрос для выполнения.
  • --remote Выполнить в вашей проектной базе данных Studio. Опустите, чтобы выполнить на вашем сервере разработки.

Выполните необработанный SQL-запрос к вашей базе данных. Используйте флаг --remote для выполнения в базе данных проекта Studio или опустите этот флаг для выполнения на сервере разработки.

Дополнительные интеграции

UI-фреймворки

SSR адаптеры

Другие интеграции