INTEGRITY Dokumentace

Dotazování D1 z Python Workers

Platforma Cloudflare Workers podporuje více jazyků, včetně TypeScript, JavaScript, Rust a Python. Tento návod ukazuje, jak dotazovat databázi D1 z Python a nasaďte svou aplikaci globálně.

Předpoklady

Než začnete, měli byste:

  1. Zkontrolujte výukový kurz D1 pro TypeScript a JavaScript a zjistěte, jak vytvořte databázi D1 a nakonfigurujte projekt Workers.
  2. Viz Průvodce jazykem Python a pochopíte, jak podpora Pythonu funguje na platformě Workers.
  3. Mějte základní znalost jazyka Python.

Pokud s Cloudflare Workers teprve začínáte, přečtěte si Úvodní návod nejprve, než budete pokračovat v tomto příkladu.

Dotazování z Pythonu

Tento příklad předpokládá, že již máte existující databázi D1. Aby mohl váš Python Worker databázi dotazovat, musíte nejprve vytvořit binding mezi vaším Workerem a databází D1 a definovat to ve svém Konfigurační soubor Wrangler.

Budete potřebovat database_name a database_id pro databázi D1. Můžete použít wrangler CLI pro vytvoření nové databáze nebo získání ID existující databáze následujícím způsobem:

Vytvořte databázi
npx wrangler d1 create my-first-db
Získání ID databáze
npx wrangler d1 info some-existing-db
# ┌───────────────────┬──────────────────────────────────────┐
# │                   │ c89db32e-83f4-4e62-8cd7-7c8f97659029 │
# ├───────────────────┼──────────────────────────────────────┤
# │ name              │ db-enam                              │
# ├───────────────────┼──────────────────────────────────────┤
# │ created_at        │ 2023-06-12T16:52:03.071Z             │
# └───────────────────┴──────────────────────────────────────┘

1. Nakonfigurujte vazby

Ve svém souboru Wrangler vytvořte nový [[d1_databases]] konfigurační blok a nastavte database_name a database_id na název a id (v tomto pořadí) databáze D1, kterou chcete dotazovat:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "python-and-d1",
	"main": "src/entry.py",
	"compatibility_flags": [ // Required for Python Workers
		"python_workers"
	],
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"d1_databases": [
		{
			"binding": "DB", // This will be how you refer to your database in your Worker
			"database_name": "YOUR_DATABASE_NAME",
			"database_id": "YOUR_DATABASE_ID"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "python-and-d1"
main = "src/entry.py"
compatibility_flags = [ "python_workers" ]
# Set this to today's date
compatibility_date = "2026-08-28"

[[d1_databases]]
binding = "DB"
database_name = "YOUR_DATABASE_NAME"
database_id = "YOUR_DATABASE_ID"

Hodnota binding je název, pod kterým budete databázi odkazovat ve svém Workeru. Pokud jej změníte, musíte tuto změnu provést i ve skriptu Workeru.

2. Vytvořte svůj Python Worker

Chcete-li vytvořit Python Worker, vytvořte prázdný soubor na src/entry.py, odpovídající hodnotě main ve vašem souboru Wrangler s tímto obsahem:

from workers import Response, WorkerEntrypoint

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        # Do anything else you'd like on request here!

        try:
            # Query D1 - we'll list all tables in our database in this example
            results = await self.env.DB.prepare("PRAGMA table_list").run()
            # Return a JSON response
            return Response.json(results)
        except Exception as e:
            return Response.json({"error": "Database query failed"}, status=500)

Hodnota binding ve vašem souboru Wrangler musí přesně odpovídat názvu proměnné v kódu Python. Tento příklad odkazuje na databázi prostřednictvím DB binding a dotazuje se na tento binding přes await self.env.DB.prepare(...).

Poté můžete svého Python Workera nasadit přímo:

npx wrangler deploy
# Example output
#
# Your worker has access to the following bindings:
# - D1 Databases:
#   - DB: db-enam (c89db32e-83f4-4e62-8cd7-7c8f97659029)
# Total Upload: 0.18 KiB / gzip: 0.17 KiB
# Uploaded python-and-d1 (4.93 sec)
# Published python-and-d1 (0.51 sec)
#   https://python-and-d1.YOUR_SUBDOMAIN.workers.dev
# Current Deployment ID: 80b72e19-da82-4465-83a2-c12fb11ccc72

Váš Worker bude dostupný na https://python-and-d1.YOUR_SUBDOMAIN.workers.dev.

Pokud při nasazování obdržíte chybu:

Další kroky