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

D1 Database

Чтобы взаимодействовать с базой данных D1 из вашего Worker, обращайтесь к ней через привязки окружения, предоставленные Worker (env).

async fetch(request, env) {
	// D1 database is 'env.DB', where "DB" is the binding name from the Wrangler configuration file.
}
from workers import WorkerEntrypoint

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        # D1 database is 'self.env.DB', where "DB" is the binding name from the Wrangler configuration file.
        pass

Привязка D1 имеет тип D1Database, и поддерживает ряд методов, перечисленных ниже.

Методы

prepare()

Подготавливает оператор запроса к последующему выполнению.

const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)

Параметры

Возвращаемые значения

Рекомендации

Вы можете использовать bind метод для динамической привязки значения к инструкции запроса, как показано ниже.

См. bind документация по методу, где это описано подробнее.

batch()

Отправляет несколько SQL-операторов в рамках одного вызова базы данных. Это может существенно повысить производительность, поскольку сокращает задержку за счёт сетевых обращений к D1. D1 работает в режиме автоматической фиксации. Наша реализация гарантирует, что каждый оператор из списка будет выполнен и зафиксирован последовательно, а не одновременно.

Пакетные операторы являются SQL-транзакции. Если один из операторов в последовательности завершится ошибкой, для этого оператора возвращается ошибка, и вся последовательность прерывается или откатывается.

Чтобы отправить пакетные операторы, укажите D1Database::batch список prepared statements и получить результаты в том же порядке.

const companyName1 = `Bs Beverages`;
const companyName2 = `Around the Horn`;
const stmt = env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`);
const batchResult = await env.DB.batch([
	stmt.bind(companyName1),
	stmt.bind(companyName2)
]);
company_name1 = "Bs Beverages"
company_name2 = "Around the Horn"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?")
batch_result = await self.env.DB.batch([
    stmt.bind(company_name1),
    stmt.bind(company_name2),
])

Параметры

Возвращаемые значения

Пример возвращаемых значений

const companyName1 = `Bs Beverages`;
const companyName2 = `Around the Horn`;
const stmt = await env.DB.batch([
	env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`).bind(companyName1),
	env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`).bind(companyName2)
]);
return Response.json(stmt)
from workers import Response

company_name1 = "Bs Beverages"
company_name2 = "Around the Horn"
stmt = await self.env.DB.batch([
    self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(company_name1),
    self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(company_name2),
])
return Response.json(stmt)
[
  {
    "success": true,
    "meta": {
      "served_by": "miniflare.db",
      "duration": 0,
      "changes": 0,
      "last_row_id": 0,
      "changed_db": false,
      "size_after": 8192,
      "rows_read": 4,
      "rows_written": 0
    },
    "results": [
      {
        "CustomerId": 11,
        "CompanyName": "Bs Beverages",
        "ContactName": "Victoria Ashworth"
      },
      {
        "CustomerId": 13,
        "CompanyName": "Bs Beverages",
        "ContactName": "Random Name"
      }
    ]
  },
  {
    "success": true,
    "meta": {
      "served_by": "miniflare.db",
      "duration": 0,
      "changes": 0,
      "last_row_id": 0,
      "changed_db": false,
      "size_after": 8192,
      "rows_read": 4,
      "rows_written": 0
    },
    "results": [
      {
        "CustomerId": 4,
        "CompanyName": "Around the Horn",
        "ContactName": "Thomas Hardy"
      }
    ]
  }
]
console.log(stmt[1].results);
print(stmt[1].results.to_py())
[
  {
    "CustomerId": 4,
    "CompanyName": "Around the Horn",
    "ContactName": "Thomas Hardy"
  }
]

Рекомендации

exec()

Выполняет один или несколько запросов напрямую, без prepared statements или привязки параметров.

const returnValue = await env.DB.exec(`SELECT * FROM Customers WHERE CompanyName = "Bs Beverages"`);
return_value = await self.env.DB.exec('SELECT * FROM Customers WHERE CompanyName = "Bs Beverages"')

Параметры

Возвращаемые значения

Пример возвращаемых значений

const returnValue = await env.DB.exec(`SELECT * FROM Customers WHERE CompanyName = "Bs Beverages"`);
return Response.json(returnValue);
from workers import Response

return_value = await self.env.DB.exec('SELECT * FROM Customers WHERE CompanyName = "Bs Beverages"')
return Response.json(return_value)
{
  "count": 1,
  "duration": 1
}

Рекомендации

dump

Экспортирует всю базу данных D1 в файл, совместимый с SQLite, внутри ArrayBuffer.

const dump = await db.dump();
return new Response(dump, {
	status: 200,
	headers: {
		"Content-Type": "application/octet-stream",
	},
});
from workers import Response

dump = await db.dump()
return Response(dump, status=200, headers={"Content-Type": "application/octet-stream"})

Параметры

Возвращаемые значения

withSession()

Запускает сессию D1, которая обеспечивает последовательную согласованность между запросами, выполненными для возвращённого D1DatabaseSession объект.

const session = env.DB.withSession("<parameter>");
session = self.env.DB.withSession("<parameter>")

Параметры

Возвращаемые значения

Рекомендации

D1DatabaseSession методы

getBookmark

Извлекает последний bookmark из D1 Session.

const session = env.DB.withSession("first-primary");
const result = await session
	.prepare(`SELECT * FROM Customers WHERE CompanyName = 'Bs Beverages'`)
	.run()
const { bookmark } = session.getBookmark();
	return bookmark;
session = self.env.DB.withSession("first-primary")
result = await session.prepare(
    "SELECT * FROM Customers WHERE CompanyName = 'Bs Beverages'"
).run()

bookmark = session.getBookmark()

Параметры

Возвращаемые значения

prepare()

Этот метод эквивалентен D1Database::prepare.

batch()

Этот метод эквивалентен D1Database::batch.