← Cloudflare D1 / d1
Začínáme
Tento návod vás provede:
- Vytvoření první databáze pomocí D1, nativní bezserverové SQL databáze od Cloudflare.
- Vytvoření schématu a dotazování databáze z příkazové řádky.
- Připojení Cloudflare Worker k vaší databázi D1 pomocí vazeb a programové dotazování vaší databáze D1.
Tyto úkoly můžete provádět přes CLI nebo přes Cloudflare dashboard.
Rychlý start
Pokud chcete kroky přeskočit a rychle začít, klikněte na tlačítko níže.
Tím se vytvoří repozitář ve vašem účtu GitHub a aplikace se nasadí na Cloudflare Workers. Tuto možnost použijte, pokud Cloudflare Workers dobře znáte a chcete přeskočit podrobné pokyny krok za krokem.
Pokud s Cloudflare Workers teprve začínáte, můžete kroky projít ručně.
Předpoklady
- Zaregistrujte si účet Cloudflare ↗.
- Nainstalujte
Node.js↗.
Správce verzí Node.js
Použijte správce verzí Node, jako je Volta ↗ nebo nvm ↗ abyste se vyhnuli problémům s oprávněními a mohli měnit verze Node.js. Wrangler, o kterém se dozvíte dále v této příručce, vyžaduje verzi Node 16.17.0 nebo novější.
1. Vytvořte Worker
Vytvořte nový Worker, pomocí kterého budete databázi dotazovat.
-
Vytvořte nový projekt s názvem
d1-tutorialspuštěním:npm create cloudflare@latest -- d1-tutorialPři nastavení vyberte následující možnosti:
- Pro S čím byste chtěli začít?, vyberte
Hello World example. - Pro Jakou šablonu chcete použít?, vyberte
Worker only. - Pro Jaký jazyk chcete použít?, vyberte
TypeScript. - Pro Chcete používat git pro správu verzí?, vyberte
Yes. - Pro Chcete nasadit svou aplikaci?, vyberte
No(před nasazením provedeme ještě několik změn).
Tím se vytvoří nová
d1-tutorialadresáře, jak je znázorněno níže.- d1-tutorial
- node_modules/
- test/
- src
- index.ts
- package-lock.json
- package.json
- testconfig.json
- vitest.config.mts
- worker-configuration.d.ts
- wrangler.jsonc
Váš nový
d1-tutorialadresář obsahuje:- A
"Hello World"Worker vindex.ts. - A Konfigurační soubor Wrangler. Tento soubor určuje, jak váš
d1-tutorialWorker přistupuje k vaší databázi D1.
- Pro S čím byste chtěli začít?, vyberte
- V dashboardu Cloudflare přejděte na Workers & Pages . Přejděte na Workers & Pages ↗
- Vyberte Vytvoření aplikace.
- Vyberte Začněte s Hello World! > Začínáme.
- Pojmenujte svého Workera. Pro účely tohoto tutoriálu pojmenujte svého Workera
d1-tutorial. - Vyberte Nasadit.
2. Vytvořte databázi
Databáze D1 je koncepčně podobná mnoha jiným SQL databázím: databáze může obsahovat jednu nebo více tabulek, umožňuje nad nimi provádět dotazy a volitelně obsahuje indexy. D1 využívá známý Dotazovací jazyk SQL ↗ (jak se používá v SQLite).
Chcete-li vytvořit svou první databázi D1:
-
Přejděte do adresáře, který jste právě vytvořili pro svůj projekt Workers:
cd d1-tutorial -
Spusťte následující
wrangler@latest d1příkaz a zadejte název databáze. V tomto návodu se databáze jmenujeprod-d1-tutorial:npx wrangler@latest d1 create prod-d1-tutorial✅ Successfully created DB 'prod-d1-tutorial' in region WEUR Created your new D1 database. { "d1_databases": [ { "binding": "prod_d1_tutorial", "database_name": "prod-d1-tutorial", "database_id": "<unique-ID-for-your-database>" } ] } -
Po zobrazení výzvy:
Would you like Wrangler to add it on your behalf?, vyberteYes. Tím se vazba automaticky přidá do konfiguračního souboru Wrangler.
Tím se vytvoří nová databáze D1 a zobrazí se binding konfiguraci potřebnou v dalším kroku.
-
V dashboardu Cloudflare přejděte na SQL databáze D1 stránce.
Přejděte na SQL databáze D1 ↗ -
Vyberte Create Database.
-
Pojmenujte databázi. Pro účely tohoto tutoriálu pojmenujte databázi D1
prod-d1-tutorial. -
(Volitelné) Zadejte location hint. Location hint je volitelný parametr, kterým můžete určit požadované geografické umístění vaší databáze. Více informací najdete v Zadejte nápovědu umístění s dalšími informacemi.
-
Vyberte Vytvořit.
3. Svažte svůj Worker s databází D1
Aby se váš Worker mohl připojit k databázi D1, musíte vytvořit binding. Bindings umožňují vašim Workers přistupovat k prostředkům, jako je D1, na vývojářské platformě Cloudflare.
Chcete-li svázat databázi D1 s Workerem:
Binding můžete automaticky přidat do konfiguračního souboru Wrangler při spuštění příkazu wrangler d1 create příkaz (krok 3 z 2. Vytvořte databázi).
Pokud však chcete přidat vazbu ručně, postupujte podle následujících kroků:
-
Zkopírujte řádky získané v kroku 2 z 2. Vytvořte databázi z terminálu.
-
Přidejte je na konec souboru Wrangler.
{ "d1_databases": [ { "binding": "prod_d1_tutorial", // available in your Worker on env.DB "database_name": "prod-d1-tutorial", "database_id": "<unique-ID-for-your-database>" } ] }[[d1_databases]] binding = "prod_d1_tutorial" database_name = "prod-d1-tutorial" database_id = "<unique-ID-for-your-database>"Konkrétně:
- Hodnota (řetězec), kterou nastavíte pro
bindingje název bindingu, a slouží k odkazování na tuto databázi ve vašem Workeru. V tomto tutoriálu pojmenujte svou vazbuprod_d1_tutorial. - Název bindingu musí být platný název proměnné v JavaScriptu ↗. Například
binding = "MY_DB"nebobinding = "productionDB"by byly oba platné názvy pro binding. - Váš binding je ve Workeru dostupný na
env.<BINDING_NAME>a D1 Workers Binding API je dostupný v rámci tohoto bindingu.
- Hodnota (řetězec), kterou nastavíte pro
Databázi D1 můžete také propojit s Pages Function. Další informace najdete v Functions Bindings pro D1.
Bindings vytvoříte tak, že je přidáte k vytvořenému Workeru.
- V dashboardu Cloudflare přejděte na Workers & Pages . Přejděte na Workers & Pages ↗
- Vyberte
d1-tutorialWorker, který jste vytvořili v krok 1. - Přejděte na Bindings kartě.
- Vyberte Add binding.
- Vyberte databáze D1 > Add binding.
- Pojmenujte binding v Název proměnné, poté vyberte
prod-d1-tutorialdatabáze D1, kterou jste vytvořili v krok 2 z rozbalovací nabídky. Pro účely tohoto návodu pojmenujte bindingprod_d1_tutorial. - Vyberte Add binding.
4. Spusťte dotaz nad svou databází D1
Naplnění databáze D1 daty
Po správné přípravě Konfigurační soubor Wrangler, nastavte databázi. Vytvořte schema.sql soubor pomocí níže uvedené syntaxe SQL a inicializujte tak svou databázi.
-
Zkopírujte následující kód a uložte jej jako
schema.sqlsoubor vd1-tutorialadresář Workeru, který jste vytvořili v kroku 1:DROP TABLE IF EXISTS Customers; CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT); INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name'); -
Databázi nejprve inicializujte pro lokální spuštění a testování. Novou databázi D1 vytvořte spuštěním:
npx wrangler d1 execute prod-d1-tutorial --local --file=./schema.sql⛅️ wrangler 4.13.2 ------------------- 🌀 Executing on local database prod-d1-tutorial (<DATABASE_ID>) from .wrangler/state/v3/d1: 🌀 To execute on your remote database, add a --remote flag to your wrangler command. 🚣 3 commands executed successfully. -
Ověřte, že jsou vaše data v databázi, spuštěním:
npx wrangler d1 execute prod-d1-tutorial --local --command="SELECT * FROM Customers"🌀 Executing on local database jun-d1-db-gs-2025 (cf91ec5c-fa77-4d49-ad8e-e22921b996b2) from .wrangler/state/v3/d1: 🌀 To execute on your remote database, add a --remote flag to your wrangler command. 🚣 1 command executed successfully. ┌────────────┬─────────────────────┬───────────────────┐ │ CustomerId │ CompanyName │ ContactName │ ├────────────┼─────────────────────┼───────────────────┤ │ 1 │ Alfreds Futterkiste │ Maria Anders │ ├────────────┼─────────────────────┼───────────────────┤ │ 4 │ Around the Horn │ Thomas Hardy │ ├────────────┼─────────────────────┼───────────────────┤ │ 11 │ Bs Beverages │ Victoria Ashworth │ ├────────────┼─────────────────────┼───────────────────┤ │ 13 │ Bs Beverages │ Random Name │ └────────────┴─────────────────────┴───────────────────┘
Pomocí Dashboardu vytvořte tabulku a naplňte ji daty.
-
V dashboardu Cloudflare přejděte na SQL databáze D1 stránce.
Přejděte na SQL databáze D1 ↗ -
Vyberte
prod-d1-tutorialdatabázi, kterou jste vytvořili v krok 2. -
Vyberte Konzole.
-
Vložte následující úryvek SQL.
DROP TABLE IF EXISTS Customers; CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT); INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name'); -
Vyberte Spustit. Tím se vytvoří tabulka s názvem
Customersve vašemprod-d1-tutorialdatabáze. -
Vyberte Tabulky, poté vyberte
Customerstabulku pro zobrazení obsahu tabulky.
Zápisové dotazy ve vašem Workeru
Jakmile máte databázi nastavenou, spusťte SQL dotaz přímo z Workeru.
-
Přejděte do svého
d1-tutorialWorker a otevřeteindex.tssoubor.index.tssoubor slouží ke konfiguraci interakcí vašeho Workeru s D1. -
Vymažte obsah
index.ts. -
Vložte následující úryvek kódu do
index.tssoubor:index.jsexport default { async fetch(request, env) { const { pathname } = new URL(request.url); if (pathname === "/api/beverages") { // If you did not use `DB` as your binding name, change it here const { results } = await env.prod_d1_tutorial .prepare("SELECT * FROM Customers WHERE CompanyName = ?") .bind("Bs Beverages") .run(); return Response.json(results); } return new Response( "Call /api/beverages to see everyone who works at Bs Beverages", ); }, };index.tsexport interface Env { // If you set another name in the Wrangler config file for the value for 'binding', // replace "DB" with the variable name you defined. prod_d1_tutorial: D1Database; } export default { async fetch(request, env): Promise<Response> { const { pathname } = new URL(request.url); if (pathname === "/api/beverages") { // If you did not use `DB` as your binding name, change it here const { results } = await env.prod_d1_tutorial.prepare( "SELECT * FROM Customers WHERE CompanyName = ?", ) .bind("Bs Beverages") .run(); return Response.json(results); } return new Response( "Call /api/beverages to see everyone who works at Bs Beverages", ); }, } satisfies ExportedHandler<Env>;entry.pyfrom workers import Response, WorkerEntrypoint from urllib.parse import urlparse class Default(WorkerEntrypoint): async def fetch(self, request): pathname = urlparse(request.url).path if pathname == "/api/beverages": query = ( await self.env.prod_d1_tutorial.prepare( "SELECT * FROM Customers WHERE CompanyName = ?", ) .bind("Bs Beverages") .run() ) return Response.json(query.results) return Response( "Call /api/beverages to see everyone who works at Bs Beverages" )V kódu výše:
- Definujte binding pro svou databázi D1 ve svém kódu. Tento binding odpovídá
bindinghodnotu, kterou jste nastavili v Konfigurační soubor Wrangler v částid1_databases. - Dotazujte databázi pomocí
env.prod_d1_tutorial.preparek vydání připravený dotaz se zástupným symbolem (tím?v dotazu). - Zavolejte
bind()k bezpečnému navázání hodnoty na tento zástupný symbol. Ve skutečné aplikaci byste uživateli umožnili předatCompanyNamepro který chtějí zobrazit výsledky. Pomocíbind()brání uživatelům spouštět libovolný SQL kód (známý jako „SQL injection“) proti vaší aplikaci a mazat nebo jinak upravovat vaši databázi. - Dotaz proveďte zavoláním
run()k vrácení všech řádků (nebo žádných, pokud dotaz žádné nevrátí). - Výsledky dotazu, pokud nějaké existují, vraťte ve formátu JSON pomocí
Response.json(results).
- Definujte binding pro svou databázi D1 ve svém kódu. Tento binding odpovídá
Po nakonfigurování Workeru můžete projekt otestovat lokálně ještě před globálním nasazením.
Databázi D1 můžete dotazovat pomocí svého Workeru.
-
V dashboardu Cloudflare přejděte na Workers & Pages stránce.
Přejděte na Workers & Pages ↗ -
Vyberte
d1-tutorialWorker, který jste vytvořili. -
Vyberte Upravit kód ikonu (</>).
-
Vymažte veškerý obsah
worker.jssoubor a vložte následující kód:export default { async fetch(request, env) { const { pathname } = new URL(request.url); if (pathname === "/api/beverages") { // If you did not use `DB` as your binding name, change it here const { results } = await env.prod_d1_tutorial.prepare( "SELECT * FROM Customers WHERE CompanyName = ?" ) .bind("Bs Beverages") .run(); return new Response(JSON.stringify(results), { headers: { 'Content-Type': 'application/json' } }); } return new Response( "Call /api/beverages to see everyone who works at Bs Beverages" ); }, }; -
Vyberte Save.
5. Nasaďte svou aplikaci
Nasaďte svou aplikaci na globální síti Cloudflare.
Chcete-li nasadit Worker do produkce pomocí Wrangleru, musíte nejprve zopakovat konfigurace databáze kroky po nahrazení --local příznak s --remote příznak, aby měl váš Worker data ke čtení. Tím se vytvoří tabulky databáze a data se naimportují do produkční verze vaší databáze.
-
Tabulky a záznamy do vzdálené databáze přidáte pomocí
schema.sqlsoubor, který jste vytvořili v kroku 4. Zadejteypro potvrzení rozhodnutí.npx wrangler d1 execute prod-d1-tutorial --remote --file=./schema.sql🌀 Executing on remote database prod-d1-tutorial (<DATABASE_ID>): 🌀 To execute on your local development database, remove the --remote flag from your wrangler command. Note: if the execution fails to complete, your DB will return to its original state and you can safely retry. ├ 🌀 Uploading <DATABASE_ID>.a7f10c4651cc3a26.sql │ 🌀 Uploading complete. │ 🌀 Starting import... 🌀 Processed 3 queries. 🚣 Executed 3 queries in 0.00 seconds (5 rows read, 6 rows written) Database is currently at bookmark 00000000-0000000a-00004f6d-b85c16a3dbcf077cb8f258b4d4eb965e. ┌────────────────────────┬───────────┬──────────────┬────────────────────┐ │ Total queries executed │ Rows read │ Rows written │ Database size (MB) │ ├────────────────────────┼───────────┼──────────────┼────────────────────┤ │ 3 │ 5 │ 6 │ 0.02 │ └────────────────────────┴───────────┴──────────────┴────────────────────┘ -
Ověřte, že jsou data v produkčním prostředí, spuštěním:
npx wrangler d1 execute prod-d1-tutorial --remote --command="SELECT * FROM Customers"⛅️ wrangler 4.33.1 ─────────────────── 🌀 Executing on remote database jun-d1-db-gs-2025 (cf91ec5c-fa77-4d49-ad8e-e22921b996b2): 🌀 To execute on your local development database, remove the --remote flag from your wrangler command. 🚣 Executed 1 command in 0.1797ms ┌────────────┬─────────────────────┬───────────────────┐ │ CustomerId │ CompanyName │ ContactName │ ├────────────┼─────────────────────┼───────────────────┤ │ 1 │ Alfreds Futterkiste │ Maria Anders │ ├────────────┼─────────────────────┼───────────────────┤ │ 4 │ Around the Horn │ Thomas Hardy │ ├────────────┼─────────────────────┼───────────────────┤ │ 11 │ Bs Beverages │ Victoria Ashworth │ ├────────────┼─────────────────────┼───────────────────┤ │ 13 │ Bs Beverages │ Random Name │ └────────────┴─────────────────────┴───────────────────┘ -
Nasaďte svého Workera, aby byl váš projekt dostupný na internetu. Spusťte:
npx wrangler deploy⛅️ wrangler 4.33.1 ──────────────────── Total Upload: 0.52 KiB / gzip: 0.33 KiB Your Worker has access to the following bindings: Binding Resource env.prod_d1_tutorial (prod-d1-tutorial) D1 Database Uploaded prod-d1-tutorial (4.17 sec) Deployed prod-d1-tutorial triggers (3.49 sec) https://prod-d1-tutorial.pcx-team.workers.dev Current Version ID: 42c82f1c-ff2b-4dce-9ea2-265adcccd0d5Nyní můžete navštívit URL adresu nově vytvořeného projektu a spustit dotaz do vaší ostré databáze.
Pokud je například URL vašeho nového Workeru
d1-tutorial.<YOUR_SUBDOMAIN>.workers.dev, přístupem khttps://d1-tutorial.<YOUR_SUBDOMAIN>.workers.dev/api/beveragesodesílá požadavek do vašeho Workeru, který přímo dotazuje vaši živou databázi. -
Ověřte, že vaše databáze funguje správně. Přidejte
/api/beveragesna poskytnutou adresu URL Wrangleru. Napříkladhttps://d1-tutorial.<YOUR_SUBDOMAIN>.workers.dev/api/beverages.
- V dashboardu Cloudflare přejděte na Workers & Pages . Přejděte na Workers & Pages ↗
- Vyberte svůj
d1-tutorialWorker. - Vyberte Deployments.
- Z Historie verzí tabulku vyberte Deploy version.
- Z Deploy version stránce vyberte Nasadit.
Tím se do produkce nasadí nejnovější verze kódu Workeru.
6. (Volitelné) Vyvíjejte lokálně pomocí Wrangler
Pokud používáte D1 s Wrangler, můžete databázi otestovat lokálně. V adresáři projektu spusťte:
-
Spustit
wrangler dev:npx wrangler devKdyž spustíte
wrangler dev, Wrangler poskytne adresu URL (nejspíšelocalhost:8787) pro kontrolu vašeho Workeru. -
Přejděte na tuto adresu URL.
Stránka zobrazuje
Call /api/beverages to see everyone who works at Bs Beverages. -
Ověřte, že vaše databáze funguje správně. Přidejte
/api/beveragesna poskytnutou adresu URL Wrangleru. Napříkladlocalhost:8787/api/beverages.
V případě úspěchu prohlížeč zobrazí vaše data.
7. (Volitelné) Odstraňte svou databázi
Chcete-li odstranit databázi:
Spusťte:
npx wrangler d1 delete prod-d1-tutorial-
V dashboardu Cloudflare přejděte na SQL databáze D1 stránce.
Přejděte na SQL databáze D1 ↗ -
Vyberte svůj
prod-d1-tutorialdatabáze D1. -
Vyberte Nastavení.
-
Vyberte Smazat.
-
Zadejte název databáze (
prod-d1-tutorial) pro potvrzení smazání.
Pokud chcete Worker odstranit:
Spusťte:
npx wrangler delete d1-tutorial-
V dashboardu Cloudflare přejděte na Workers & Pages stránce.
Přejděte na Workers & Pages ↗ -
Vyberte svůj
d1-tutorialWorker. -
Vyberte Nastavení.
-
Přejděte na konec stránky a poté vyberte Smazat.
-
Zadejte název Workeru (
d1-tutorial) pro potvrzení smazání.
Souhrn
V tomto tutoriálu jste:
- Vytvořena databáze D1
- Vytvořen Worker pro přístup k této databázi
- Nasadili jste svůj projekt globálně
Další kroky
Pokud máte požadavky na nové funkce nebo jste narazili na chyby, sdílejte zpětnou vazbu přímo s týmem Cloudflare, a to prostřednictvím Komunita vývojářů Cloudflare na Discordu ↗.
- Viz podporované Příkazy Wrangler pro D1.
- Zjistěte, jak používat D1 Worker Binding APIs ve vašem Workeru a otestujte je z API playground.
- Prozkoumejte komunitní projekty postavené na D1.