← Cloudflare D1 / d1 / examples
Запрос D1 из Python Workers
Платформа Cloudflare Workers поддерживает несколько языков, включая TypeScript, JavaScript, Rust и Python. В этом руководстве показано, как выполнять запросы к базе данных D1 из Python и разверните приложение по всему миру.
Предварительные требования
Прежде чем начать, вам нужно:
- Просмотрите руководство по D1 для TypeScript и JavaScript, чтобы узнать, как создать базу данных D1 и настроить проект Workers.
- См. Руководство по языку Python чтобы понять, как работает поддержка Python на платформе Workers.
- Базовое знакомство с языком Python.
Если вы впервые работаете с Cloudflare Workers, см. Руководство по началу работы прежде чем продолжить работу с этим примером.
Запрос из Python
В этом примере предполагается, что у вас уже есть база данных D1. Чтобы Python Worker мог выполнять запросы к базе данных, сначала нужно создать привязка между вашим Worker и базой данных D1 и указать это в своём конфигурационный файл Wrangler.
Понадобится database_name и database_id для базы данных D1. Вы можете использовать wrangler CLI, чтобы создать новую базу данных или получить идентификатор существующей базы данных, как показано ниже:
npx wrangler d1 create my-first-dbnpx 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.
Если при развертывании возникает ошибка:
- Убедитесь, что вы настроили конфигурационный файл Wrangler на
database_idиdatabase_nameдействительной базы данных D1. - Убедитесь
compatibility_flags = ["python_workers"]задаётся в вашем конфигурационный файл Wrangler, что требуется для Python. - Просмотрите список кодов ошибок, и убедитесь, что ваш код не выбрасывает необработанное исключение.
Следующие шаги
- См. Документация Workers Python чтобы узнать больше об использовании Python в Workers.
- Просмотрите D1 Workers Binding API и как выполнять запросы к базам данных D1.
- Узнайте как импортировать данные к вашей базе данных D1.