← Cloudflare D1 / d1 / best-practices
Dotazování databáze
D1 je kompatibilní s většinou konvencí SQL v SQLite, protože využívá jeho dotazovací engine. K dotazování D1 můžete použít příkazy SQL.
S databází D1 můžete pracovat několika způsoby:
- Použití D1 Workers Binding API ve vašem kódu.
- Použití D1 REST API.
- Použití Příkazy Wrangler pro D1.
Dotazování D1 pomocí SQL
D1 rozumí sémantice SQLite, což vám umožňuje dotazovat databázi pomocí příkazů SQL přes Workers Binding API nebo REST API (včetně příkazů Wrangler). Více informací najdete v D1 SQL API a dozvíte se více o podporovaných příkazech SQL.
Použití vztahů cizích klíčů
Při použití SQL s D1 můžete chtít definovat a vynucovat omezení cizích klíčů napříč tabulkami v databázi. Omezení cizích klíčů umožňují vynucovat vztahy mezi tabulkami nebo zabránit smazání řádků, na které odkazují řádky v jiných tabulkách. Příklad vztahu cizího klíče je uveden níže.
CREATE TABLE users (
user_id INTEGER PRIMARY KEY,
email_address TEXT,
name TEXT,
metadata TEXT
)
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
status INTEGER,
item_desc TEXT,
shipped_date INTEGER,
user_who_ordered INTEGER,
FOREIGN KEY(user_who_ordered) REFERENCES users(user_id)
)Viz Definování cizích klíčů s dalšími informacemi.
Dotazování JSON
D1 umožňuje dotazovat a analyzovat data JSON uložená v databázi. Můžete tak například získat hodnotu z objektu JSON.
Uvažujme následující objekt JSON (type:blob) ve sloupci s názvem sensor_reading, můžete z něj hodnoty extrahovat přímo.
{
"measurement": {
"temp_f": "77.4",
"aqi": [21, 42, 58],
"o3": [18, 500],
"wind_mph": "13",
"location": "US-NY"
}
}-- Extract the temperature value
SELECT json_extract(sensor_reading, '$.measurement.temp_f')-- returns "77.4" as TEXTViz Dotazování JSON a dozvíte se více o dotazování objektů JSON.
Dotazování D1 pomocí Workers Binding API
Workers Binding API primárně komunikuje s datovou rovinou a umožňuje dotazovat databázi D1 z vašeho Workeru.
To vyžaduje, abyste:
- Navažte databázi D1 na svůj Worker.
- Připravte příkaz.
- Spusťte příkaz.
export default {
async fetch(request, env) {
const {pathname} = new URL(request.url);
const companyName1 = `Bs Beverages`;
const companyName2 = `Around the Horn`;
const stmt = env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`);
if (pathname === `/RUN`) {
const returnValue = await stmt.bind(companyName1).run();
return Response.json(returnValue);
}
return new Response(
`Welcome to the D1 API Playground!
\nChange the URL to test the various methods inside your index.js file.`,
);
},
};Viz Workers Binding API s dalšími informacemi.
Dotazování D1 pomocí REST API
REST API komunikuje především s řídicí rovinou a umožňuje vytvářet a spravovat databázi D1.
Viz D1 REST API REST API dokumentaci D1.
Dotazování D1 pomocí příkazů Wrangler
K dotazování databáze D1 můžete použít příkazy Wrangler. Upozorňujeme, že příkazy Wrangler k provádění operací využívají REST API.
npx wrangler d1 execute prod-d1-tutorial --command="SELECT * FROM Customers"🌀 Mapping SQL input into an array of statements
🌀 Executing on local database production-db-backend (<DATABASE_ID>) from .wrangler/state/v3/d1:
┌────────────┬─────────────────────┬───────────────────┐
│ CustomerId │ CompanyName │ ContactName │
├────────────┼─────────────────────┼───────────────────┤
│ 1 │ Alfreds Futterkiste │ Maria Anders │
├────────────┼─────────────────────┼───────────────────┤
│ 4 │ Around the Horn │ Thomas Hardy │
├────────────┼─────────────────────┼───────────────────┤
│ 11 │ Bs Beverages │ Victoria Ashworth │
├────────────┼─────────────────────┼───────────────────┤
│ 13 │ Bs Beverages │ Random Name │
└────────────┴─────────────────────┴───────────────────┘