Dokumentace Domluvit pilot

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ů:

  1. Navázání databáze D1.
  2. Příprava příkazu.
  3. Spusťte prepared statement.
  4. 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

  1. Přejděte do adresáře tutoriálu, který jste vytvořili podle kroku 1.
  2. 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
  3. Otevře prohlížeč na zadané adrese.

4. Otestujte API

Změňte URL adresu a vyzkoušejte různá API pro vazbu D1 Worker.

Požádejte o pilot zdarma

Domluvit pilot