@astrojs/ db
Astro DB 是专为 Astro 生态系统设计的完全托管 SQL 数据库:在 Astro 中本地开发并从你的 Astro Studio 仪表板 部署。
¥Astro DB is a fully-managed SQL database designed for the Astro ecosystem: develop locally in Astro and deploy from your Astro Studio dashboard.
使用 Astro DB,你将拥有一个功能强大、本地、类型安全的工具来查询和建模内容作为关系数据库。通过交互式 Studio 仪表板查看、管理和部署托管的远程数据。
¥With Astro DB you have a powerful, local, type-safe tool to query and model content as a relational database. View, manage and deploy your hosted remote data through your interactive Studio dashboard.
¥Installation
Astro 包含一个 astro add
命令来自动设置官方集成。如果你愿意,你可以改用 安装集成手动。
¥Astro includes an astro add
command to automate the setup of official integrations. If you prefer, you can install integrations manually instead.
在新的终端窗口中运行以下命令之一。
¥Run one of the following commands in a new terminal window.
¥Manual Installation
如果你希望自己从头开始设置,请跳过 astro add
并按照这些说明自行安装 Astro DB。
¥If you prefer to set things up from scratch yourself, skip astro add
and follow these instructions to install Astro DB yourself.
1. 通过包管理器从 npm 安装集成
Section titled 1. 通过包管理器从 npm 安装集成¥ Install the integration from npm via a package manager
2. 将集成添加到 astro.config.mjs
Section titled 2. 将集成添加到 astro.config.mjs¥ Add the integration to astro.config.mjs
3. 配置你的数据库
Section titled 3. 配置你的数据库¥ Configure your database
在项目的根目录中创建一个 db/config.ts
文件。这是一个特殊文件,Astro 将自动加载并使用它配置你的数据库表。
¥Create a db/config.ts
file at the root of your project. This is a special file that Astro will automatically load and use to configure your database tables.
表格配置参考
Section titled 表格配置参考¥Table configuration reference
columns
Section titled columns使用 columns
对象配置表列:
¥Table columns are configured using the columns
object:
使用 column
实用程序配置列。column
支持以下类型:
¥Columns are configured using the column
utility. column
supports the following types:
-
column.text(...)
- 存储纯文本或富文本内容 -
column.number(...)
- 存储整数和浮点值 -
column.boolean(...)
- 存储真/假值 -
column.date(...)
- 存储Date
对象,解析为 ISO 字符串以进行数据存储 -
column.json(...)
- 存储任意 JSON blob,解析为字符串化的 JSON 以进行数据存储
所有列中都有一些共享的配置值:
¥There are a few shared configuration values across all columns:
-
primaryKey
- 将number
或text
列设置为唯一标识符。 -
optional
- Astro DB 默认对所有列使用NOT NULL
。将optional
设置为true
以允许空值。 -
default
- 设置新插入条目的默认值。这接受静态值或sql
字符串作为生成的值(如时间戳)。 -
unique
- 将列标记为唯一。这可以防止表中的条目出现重复值。 -
references
- 按列引用相关表。这将建立外键约束,这意味着每个列值在引用表中都必须具有匹配的值。
indexes
Section titled indexes表索引用于提高给定列或列组合的查找速度。indexes
属性接受指定要索引的列的配置对象数组:
¥Table indexes are used to improve lookup speeds on a given column or combination of columns. The indexes
property accepts an array of configuration objects specifying the columns to index:
这将在 authorId
和 published
列上生成一个名为 Comment_authorId_published_idx
的唯一索引。
¥This will generate a unique index on the authorId
and published
columns with the name Comment_authorId_published_idx
.
每个索引都有以下配置选项:
¥The following configuration options are available for each index:
-
on
:string | string[]
- 要索引的单个列或列名数组。 -
unique
:boolean
- 设置为true
以在索引列中强制使用唯一值。 -
name
:string
(可选) - 唯一索引的自定义名称。这将根据被索引的表和列名称覆盖 Astro 生成的名称(例如Comment_authorId_published_idx
)。自定义名称是全局的,因此请确保索引名称在表之间不冲突。
foreignKeys
Section titled foreignKeys外键用于建立两个表之间的关系。foreignKeys
属性接受可能在表之间关联一个或多个列的配置对象数组:
¥Foreign keys are used to establish a relationship between two tables. The foreignKeys
property accepts an array of configuration objects that may relate one or more columns between tables:
每个外键配置对象都接受以下属性:
¥Each foreign key configuration object accepts the following properties:
-
columns
:string[]
- 与引用表相关的列名数组。 -
references
:() => Column[]
- 返回引用表中的列数组的函数。
Astro DB CLI 参考
Section titled Astro DB CLI 参考¥Astro DB CLI reference
Astro DB 包含一组 CLI 命令,用于与你的托管项目数据库和 Astro Studio 账户进行交互。
¥Astro DB includes a set of CLI commands to interact with your hosted project database and your Astro Studio account.
使用 GitHub CI 操作时会自动调用这些命令,也可以使用 astro db
CLI 手动调用。
¥These commands are called automatically when using a GitHub CI action, and can be called manually using the astro db
CLI.
astro db push
Section titled astro db push标志:
¥Flags:
--force-reset
如果需要重大架构更改,请重置所有生产数据。
安全地将数据库配置更改推送到你的项目数据库。这将检查是否存在数据丢失风险,并指导你完成任何推荐的迁移步骤。如果必须进行重大架构更改,请使用 --force-reset
标志重置所有生产数据。
¥Safely push database configuration changes to your project database. This will check for any risk of data loss and guide you on any recommended migration steps. If a breaking schema change must be made, use the --force-reset
flag to reset all production data.
astro db verify
Section titled astro db verify检查本地和远程数据库配置之间是否存在任何差异。这由 astro db push
自动运行。verify
将比较你的本地 db/config.ts
文件与远程数据库,并在检测到更改时发出警告。
¥Check for any differences between your local and remote database configurations. This is automatically run by astro db push
. verify
will compare your local db/config.ts
file with the remote database and warn if changes are detected.
astro db execute <file-path>
Section titled astro db execute <file-path>标志:
¥Flags:
--remote
针对你的 Studio 项目数据库运行。省略针对你的开发服务器运行。
执行 .ts
或 .js
文件以读取或写入数据库。这接受文件路径作为参数,并支持使用 astro:db
模块编写类型安全查询。使用 --remote
标志针对你的 Studio 项目数据库运行,或省略该标志针对你的开发服务器运行。请参阅如何使用 种子开发数据 获取示例文件。
¥Execute a .ts
or .js
file to read or write to your database. This accepts a file path as an argument, and supports usage of the astro:db
module to write type-safe queries. Use the --remote
flag to run against your Studio project database, or omit the flag to run against your development server. See how to seed development data for an example file.
astro db shell --query <sql-string>
Section titled astro db shell --query <sql-string>标志:
¥Flags:
-
--query
要执行的原始 SQL 查询。 -
--remote
针对你的 Studio 项目数据库运行。省略针对你的开发服务器运行。
对数据库执行原始 SQL 查询。使用 --remote
标志针对你的 Studio 项目数据库运行,或省略该标志针对你的开发服务器运行。
¥Execute a raw SQL query against your database. Use the --remote
flag to run against your Studio project database, or omit the flag to run against your development server.
Astro DB 实用程序参考
Section titled Astro DB 实用程序参考¥Astro DB utility reference
isDbError()
Section titled isDbError()isDbError()
函数检查错误是否为 libSQL 数据库异常。这可能包括使用引用时的外键约束错误,或插入数据时缺少字段。你可以将 isDbError()
与 try / catch 块结合使用,以处理应用中的数据库错误:
¥The isDbError()
function checks if an error is a libSQL database exception. This may include a foreign key constraint error when using references, or missing fields when inserting data. You can combine isDbError()
with a try / catch block to handle database errors in your application: