INTEGRITY Документация

Запрос D1 из Python Workers

Платформа Cloudflare Workers поддерживает несколько языков, включая TypeScript, JavaScript, Rust и Python. В этом руководстве показано, как выполнять запросы к базе данных D1 из Python и разверните приложение по всему миру.

Предварительные требования

Прежде чем начать, вам нужно:

  1. Просмотрите руководство по D1 для TypeScript и JavaScript, чтобы узнать, как создать базу данных D1 и настроить проект Workers.
  2. См. Руководство по языку Python чтобы понять, как работает поддержка Python на платформе Workers.
  3. Базовое знакомство с языком Python.

Если вы впервые работаете с Cloudflare Workers, см. Руководство по началу работы прежде чем продолжить работу с этим примером.

Запрос из Python

В этом примере предполагается, что у вас уже есть база данных D1. Чтобы Python Worker мог выполнять запросы к базе данных, сначала нужно создать привязка между вашим Worker и базой данных D1 и указать это в своём конфигурационный файл Wrangler.

Понадобится database_name и database_id для базы данных D1. Вы можете использовать wrangler CLI, чтобы создать новую базу данных или получить идентификатор существующей базы данных, как показано ниже:

Создайте базу данных
npx wrangler d1 create my-first-db
Получение идентификатора базы данных
npx wrangler d1 info some-existing-db
# ┌───────────────────┬──────────────────────────────────────┐
# │                   │ c89db32e-83f4-4e62-8cd7-7c8f97659029 │
# ├───────────────────┼──────────────────────────────────────┤
# │ name              │ db-enam                              │
# ├───────────────────┼──────────────────────────────────────┤
# │ created_at        │ 2023-06-12T16:52:03.071Z             │
# └───────────────────┴──────────────────────────────────────┘

1. Настройте привязки

В файле Wrangler создайте новый [[d1_databases]] конфигурационный блок и укажите database_name и database_id имени и id (соответственно) базы данных D1, к которой вы хотите обратиться с запросом:

{
	"$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"

Значение binding используется для обращения к базе данных из вашего Worker. Если вы измените это значение, его нужно будет изменить и в коде вашего Worker.

2. Создайте свой Python Worker

Чтобы создать Python Worker, создайте пустой файл по пути src/entry.py, что соответствует значению main в файле Wrangler со следующим содержимым:

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)

Значение binding в файле Wrangler должно точно совпадать с именем переменной в коде Python. В этом примере база данных используется через DB привязку и обращается к ней через await self.env.DB.prepare(...).

После этого Python Worker можно развернуть напрямую:

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

Ваш Worker будет доступен по адресу https://python-and-d1.YOUR_SUBDOMAIN.workers.dev.

Если при развертывании возникает ошибка:

Следующие шаги