← Cloudflare D1 / d1
Workers Binding API
SQL dotazy do databáze D1 můžete z Workeru spouštět pomocí Worker Binding API. Postupujte podle následujících kroků:
- Navázání databáze D1.
- Příprava příkazu.
- Spusťte prepared statement.
- Analyzujte návratový objekt (v případě potřeby).
Příslušné části najdete v dokumentaci API.
Podpora TypeScript
D1 Worker Bindings API je plně typované díky runtime typům generovaným spuštěním wrangler types balíček a také podporuje generické typy ↗ jako součást svého TypeScript API. Obecný typ (generic) umožňuje zadat volitelný type parameter aby funkce rozuměla typu dat, se kterými pracuje.
Při použití metod pro provádění dotazů D1PreparedStatement::run, D1PreparedStatement::raw a D1PreparedStatement::first, můžete zadat typ představující jednotlivé řádky databáze. API D1 vrátí objekt výsledku se správným typem.
Pokud například zadáte OrderRow typ jako typový parametr pro D1PreparedStatement::run vrátí typovaný Array<OrderRow> objekt namísto výchozího Record<string, unknown> typ:
// Row definition
type OrderRow = {
Id: string;
CustomerName: string;
OrderDate: number;
};
// Elsewhere in your application
// env.MY_DB is the D1 database binding from your Wrangler configuration file
const result = await env.MY_DB.prepare(
"SELECT Id, CustomerName, OrderDate FROM [Order] ORDER BY ShippedDate DESC LIMIT 100",
).run<OrderRow>();Konverze typů
D1 automaticky převádí podporované typy JavaScriptu (včetně TypeScriptu) předané jako parametry přes Workers Binding API na odpovídající typy D1 1. Tato konverze je trvalá a jednosměrná. To znamená, že při zpětném čtení zapsaných hodnot ve vašem kódu získáte konvertované hodnoty, nikoli hodnoty, které jste původně vložili.
Převod typů při zápisu probíhá následovně:
| JavaScript (zápis) | D1 | JavaScript (čtení) |
|---|---|---|
| null | NULL |
null |
| Číslo | REAL |
Číslo |
| Číslo 2 | INTEGER |
Číslo |
| Řetězec | TEXT |
Řetězec |
| Boolean 3 | INTEGER |
Číslo (0,1) |
| ArrayBuffer | BLOB |
Array 4 |
| ArrayBuffer View | BLOB |
Array 4 |
| undefined | Nepodporováno. 5 | - |
1 typy D1 odpovídají podkladovým SQLite typy ↗.
2 D1 podporuje 64bitová celá čísla se znaménkem INTEGER hodnoty interně, nicméně
BigInt ↗
zatím nejsou v API podporovány. Celá čísla JavaScriptu jsou bezpečná do
Number.MAX_SAFE_INTEGER ↗.
3 Hodnoty typu boolean budou převedeny na INTEGER typ, kde 1 je TRUE a
0 je FALSE.
4 ArrayBuffer a ArrayBuffer
pohledy ↗
se převádí pomocí
Array.from ↗.
5 Dotazy s undefined hodnoty vrátí D1_TYPE_ERROR.
API playground
D1 Worker Binding API playground je index.js soubor, kde můžete otestovat každé z dokumentovaných Worker Binding API pro D1. Tento soubor vychází z konečného stavu Začínáme kód.
Spolu s dokumentací API vám to pomůže lépe pochopit fungování jednotlivých API.
Postupujte podle kroků a nastavte si API playground.
1. Dokončete tutoriál Get started
Dokončete Začínáme tutoriál. Ujistěte se, že používáte JavaScript místo TypeScriptu.
2. Upravte obsah index.js
Nahraďte obsah svého index.js soubor kódem níže a podívejte se na účinek každého API.
index.js
// D1 API Playground - Test each D1 Worker Binding API method
// Change the URL pathname to test different methods (e.g., /RUN, /RAW, /FIRST)
export default {
async fetch(request, env) {
const { pathname } = new URL(request.url);
// Sample data for testing
const companyName1 = `Bs Beverages`;
const companyName2 = `Around the Horn`;
// Prepare reusable statements
const stmt = env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`);
const stmtMulti = env.DB.prepare(`SELECT * FROM Customers; SELECT * FROM Customers WHERE CompanyName = ?`);
const session = env.DB.withSession("first-primary")
const sessionStmt = session.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`);
// Test D1PreparedStatement::run - returns full D1Result object
if (pathname === `/RUN`){
const returnValue = await stmt.bind(companyName1).run();
return Response.json(returnValue);
// Test D1PreparedStatement::raw - returns array of arrays
} else if (pathname === `/RAW`){
const returnValue = await stmt.bind(companyName1).raw();
return Response.json(returnValue);
// Test D1PreparedStatement::first - returns first row only
} else if (pathname === `/FIRST`){
const returnValue = await stmt.bind(companyName1).first();
return Response.json(returnValue);
// Test D1Database::batch - execute multiple statements
} else if (pathname === `/BATCH`) {
const batchResult = await env.DB.batch([
stmt.bind(companyName1),
stmt.bind(companyName2)
]);
return Response.json(batchResult);
// Test D1Database::exec - execute raw SQL without parameters
} else if (pathname === `/EXEC`){
const returnValue = await env.DB.exec(`SELECT * FROM Customers WHERE CompanyName = "Bs Beverages"`);
return Response.json(returnValue);
// Test D1 Sessions API with read replication
} else if (pathname === `/WITHSESSION`){
const returnValue = await sessionStmt.bind(companyName1).run();
console.log("You're now using D1 Sessions!")
return Response.json(returnValue);
}
// Default response with instructions
return new Response(
`Welcome to the D1 API Playground!
\nChange the URL to test the various methods inside your index.js file.`,
);
},
};3. Nasaďte Worker
- Přejděte do adresáře tutoriálu, který jste vytvořili podle kroku 1.
- Spustit
npx wrangler deploy.npx wrangler deploy⛅️ wrangler 3.112.0 -------------------- Total Upload: 1.90 KiB / gzip: 0.59 KiB Your worker has access to the following bindings: - D1 Databases: - DB: DATABASE_NAME (<DATABASE_ID>) Uploaded WORKER_NAME (7.01 sec) Deployed WORKER_NAME triggers (1.25 sec) https://jun-d1-rr.d1-sandbox.workers.dev Current Version ID: VERSION_ID - Otevře prohlížeč na zadané adrese.
4. Otestujte API
Změňte URL adresu a vyzkoušejte různá API pro vazbu D1 Worker.