从本地 Svelte 开发环境远程连接 D1 数据库
一种将 D1 数据库与本地开发环境同步的解决方案
Cloudflare D1 数据库无法直接从本地开发环境访问。本文将指导您完成从本地 Svelte 开发环境远程连接 D1 数据库的步骤。
发布于 Mar 7, 2024 • 6 分钟阅读

Cloudflare Pages 是一个托管静态网站的优秀平台。通过支持 Functions,在 Cloudflare Pages 上运行无服务器函数,并部署全栈网站成为可能。Svelte 被 Cloudflare Pages Functions 原生支持。您可以使用 SvelteKit 和 Cloudflare Pages 实现服务器端渲染 (SSR)。至于数据库,它与 Cloudflare D1 无缝绑定,这是一个无服务器 SQL 数据库。然而,D1 数据库无法直接从本地开发环境访问。本文将指导您完成从本地 Svelte 开发环境远程连接到 D1 数据库的步骤。
背景
作为开发人员,我们经常需要从本地开发环境访问数据库。测试数据库连接并从本地开发环境运行 SQL 查询非常方便。大多数云数据库都支持此功能,例如 Firebase 和 AWS RDS。然而,D1 数据库无法直接从本地开发环境访问。这已经从他们的 官方网站 得到确认。这是因为 D1 数据库是一个无服务器数据库,它没有暴露给公共互联网。D1 数据库只能从 Cloudflare Workers 和 Cloudflare Pages 访问。因此,我们需要找到一种方法从本地开发环境远程连接到 D1 数据库。
在 D1 Cloudflare 文档中,有一个 部分 教你如何从 SvelteKit 查询 D1 数据库。然而,它只适用于本地 D1 数据库,不与远程 Cloudflare D1 数据库同步。如果您通过 Web 界面在在线 D1 数据库中创建表并插入数据,则无法从本地开发环境查询数据。这是因为本地 D1 数据库与远程 Cloudflare D1 数据库未同步。
解决方案
从本地开发环境远程连接到 D1 数据库没有直接的方法。然而,我们可以使用一个变通方法来实现这一点。大致的想法是在本地 D1 和远程 D1 数据库上执行相同的 SQL 操作命令。这样,我们的本地开发环境将具有与远程 D1 数据库相同的数据。
为了实现这一点,我们需要在本地开发环境上安装 wrangle。然后使用 wrangle cli 登录到您的 Cloudflare 账户。之后,我们可以使用 wrangle 直接在本地和远程 D1 数据库上执行 SQL 命令。这样,我们就可以在本地和远程 D1 数据库之间同步数据。
登录到 Cloudflare 账户
要登录到 Cloudflare 账户,请在终端中运行以下命令:
npx wrangler login
在 D1 数据库中创建表
登录后,您可以使用 wrangle 在 D1 数据库上执行 SQL 命令。例如,要在名为 "my_db" 的现有 D1 数据库中创建表,您可以运行以下命令:
npx wrangler d1 execute my_db --command "CREATE TABLE IF NOT EXISTS my_table (id INT PRIMARY KEY, name TEXT)"
并使用 --local
标志运行相同的命令以在本地 D1 数据库中创建表:
npx wrangler d1 execute my_db --command "CREATE TABLE IF NOT EXISTS my_table (id INT PRIMARY KEY, name TEXT)" --local
向 D1 数据库插入数据
要向远程 D1 数据库插入数据,您可以运行以下命令:
npx wrangler d1 execute my_db --command "INSERT INTO my_table (id, name) VALUES (1, "John")"
并使用 --local
标志运行相同的命令以向本地 D1 数据库插入数据:
npx wrangler d1 execute my_db --command "INSERT INTO my_table (id, name) VALUES (1, "John")" --local
使用 .sql 文件执行命令
您还可以在 D1 数据库上执行 .sql 文件。例如,要在远程 D1 数据库上执行名为 "query.sql" 的 .sql 文件,您可以运行以下命令:
npx wrangler d1 execute my_db --file query.sql
并使用 --local
标志运行相同的命令以在本地 D1 数据库上执行 .sql 文件:
npx wrangler d1 execute my_db --file query.sql --local
在 SvelteKit 上测试
在本地和远程 D1 数据库之间的数据同步后,您可以在 SvelteKit 上测试数据库连接。使用来自 官方文档 的相同代码从 SvelteKit 查询操作 D1 数据库。数据应在本地和远程 D1 数据库之间保持一致。
结论
在本文中,我们讨论了从本地 Svelte 开发环境远程连接到 D1 数据库的步骤。我们了解到,D1 数据库无法直接从本地开发环境访问。然而,我们可以使用 wrangle 在本地和远程 D1 数据库上执行相同的 SQL 命令。这样,我们就可以在本地和远程 D1 数据库之间同步数据。这使我们能够在 SvelteKit 上测试数据库连接,并使用来自远程 D1 数据库的真实数据开发网站。