← Cloudflare D1 / d1 / worker-api
Metody prepared statementu
Tato kapitola popisuje různé způsoby, jak spustit dotaz a získat jeho výsledky poté, co jste připravila váš příkaz.
Metody
bind()
Naváže parametr k připravenému příkazu.
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)Parametr
Variable:string- Proměnná, která se připojí do prepared statement. Viz pokyny níže.
Návratové hodnoty
D1PreparedStatement:Object- A
D1PreparedStatementkde byl vstupní parametr zahrnut do příkazu.
- A
Pokyny
-
D1 se řídí Konvence SQLite ↗ pro vázání parametrů připravených příkazů. D1 v současnosti podporuje pouze uspořádané (
?NNNN) a Anonymous (?) parametrů. V budoucnu bude D1 podporovat i pojmenované parametry.Syntaxe Typ Popis ?NNNSeřazené Otazník následovaný číslem NNNdrží místo proNNN. parametrNNNmusí být mezi1aSQLITE_MAX_VARIABLE_NUMBER?Anonymní Otazník, po kterém nenásleduje číslo, vytvoří parametr s číslem o jedna vyšším, než je nejvyšší již přiřazené číslo parametru. Pokud by to znamenalo, že číslo parametru je vyšší než SQLITE_MAX_VARIABLE_NUMBER, jde o chybu. Tento formát parametru je k dispozici kvůli kompatibilitě s jinými databázovými enginy. Protože se však otazníky snadno špatně spočítají, použití tohoto formátu se nedoporučuje. Programátorům doporučujeme použít některý z níže uvedených symbolických formátů nebo?NNNformát uvedený výše místo toho.Chcete-li svázat parametr, použijte
.bindmetoda.Seřazené a anonymní příklady:
const stmt = db.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind("");stmt = db.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind("")const stmt = db .prepare("SELECT * FROM Customers WHERE CompanyName = ? AND CustomerId = ?") .bind("Alfreds Futterkiste", 1);stmt = db.prepare( "SELECT * FROM Customers WHERE CompanyName = ? AND CustomerId = ?" ).bind("Alfreds Futterkiste", 1)const stmt = db .prepare( "SELECT * FROM Customers WHERE CompanyName = ?2 AND CustomerId = ?1" ).bind(1, "Alfreds Futterkiste");stmt = db.prepare("SELECT * FROM Customers WHERE CompanyName = ?2 AND CustomerId = ?1").bind(1, "Alfreds Futterkiste")
Statické příkazy
D1 API podporuje statické příkazy. Statické příkazy jsou příkazy SQL, ve kterých jsou proměnné napevno zakódovány. Při psaní statického příkazu zapisujete hodnotu proměnné ručně přímo do textu příkazu.
Příklad prepared statement s dynamicky vázanou hodnotou:
const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
// A variable (someVariable) will replace the placeholder '?' in the query.
// `stmt` is a prepared statement.some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)
# A variable (some_variable) will replace the placeholder '?' in the query.
# `stmt` is a prepared statement.Příklad statického příkazu:
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = 'Bs Beverages'");
// "Bs Beverages" is hard-coded into the query.
// `stmt` is a static statement.stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = 'Bs Beverages'")
# "Bs Beverages" is hard-coded into the query.
# `stmt` is a static statement.run()
Spustí připravený dotaz (nebo dotazy) a vrátí výsledky. Vrácené výsledky obsahují metadata.
const returnValue = await stmt.run();return_value = await stmt.run()Parametr
- Žádné.
Návratové hodnoty
D1Result:Object- Objekt obsahující stav úspěchu, objekt meta a pole objektů s výsledky dotazu.
- Další informace o tomto objektu najdete v
D1Result.
Příklad návratových hodnot
const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
const returnValue = await stmt.run();
return Response.json(returnValue);from workers import Response
some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)
return_value = await stmt.run()
return Response.json(return_value){
"success": true,
"meta": {
"served_by": "miniflare.db",
"duration": 1,
"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"
}
]
}Pokyny
resultsje prázdný u zápisových operací, jako jeUPDATE,DELETE, neboINSERT.- Při použití TypeScriptu můžete předat parametr typu na
D1PreparedStatement::runk vrácení typovaného objektu výsledku. D1PreparedStatement::runje funkčně ekvivalentní sD1PreparedStatement::all, a lze jej považovat za alias.- Z příkazu můžete získat pouze očekávané výsledky tak, že jednoduše vrátíte
resultsvlastnost návratového objektu.
Příklad vrácení pouze results
resultsreturn Response.json(returnValue.results);from workers import Response
return Response.json(return_value.results)[
{
"CustomerId": 11,
"CompanyName": "Bs Beverages",
"ContactName": "Victoria Ashworth"
},
{
"CustomerId": 13,
"CompanyName": "Bs Beverages",
"ContactName": "Random Name"
}
]raw()
Spustí připravený dotaz (nebo dotazy) a vrátí výsledky jako pole polí. Vrácené výsledky neobsahují metadata.
Názvy sloupců nejsou ve výchozím nastavení součástí výsledné sady. Chcete-li zahrnout názvy sloupců jako první řádek pole výsledků, nastavte .raw({columnNames: true}).
const returnValue = await stmt.raw();return_value = await stmt.raw()Parametry
columnNames:ObjectVolitelné- Booleovský objekt, který zahrnuje názvy sloupců jako první řádek pole výsledků.
Návratové hodnoty
Array:Array- Pole polí. Každé vnořené pole představuje jeden řádek.
Příklad návratových hodnot
const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
const returnValue = await stmt.raw();
return Response.json(returnValue);from workers import Response
some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)
return_value = await stmt.raw()
return Response.json(return_value)[
[11, "Bs Beverages",
"Victoria Ashworth"
],
[13, "Bs Beverages",
"Random Name"
]
]S parametrem columnNames: true:
const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
const returnValue = await stmt.raw({columnNames:true});
return Response.json(returnValue)from workers import Response
some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)
return_value = await stmt.raw(columnNames=True)
return Response.json(return_value)[
[
"CustomerId",
"CompanyName",
"ContactName"
],
[11, "Bs Beverages",
"Victoria Ashworth"
],
[13, "Bs Beverages",
"Random Name"
]
]Pokyny
- Při použití TypeScriptu můžete předat parametr typu na
D1PreparedStatement::rawk vrácení typovaného pole výsledků.
first()
Spustí připravený dotaz (nebo dotazy) a vrátí první řádek výsledku dotazu jako objekt. Nevrací žádná metadata, místo toho vrací přímo tento objekt.
const values = await stmt.first();values = await stmt.first()Parametry
columnName:StringVolitelné- Zadejte
columnNamek vrácení hodnoty z konkrétního sloupce prvního řádku výsledku dotazu.
- Zadejte
- Žádné.
- Chcete-li získat všechny sloupce z prvního řádku, parametr nezadávejte.
Návratové hodnoty
-
firstRow:ObjectVolitelné- Objekt obsahující první řádek výsledku dotazu.
- Návratová hodnota bude dále filtrována na konkrétní atribut, pokud
columnNamebyla zadána.
-
null:null- Pokud dotaz nevrátí žádné řádky.
Příklad návratových hodnot
Získání všech sloupců z prvního řádku:
const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
const returnValue = await stmt.first();
return Response.json(returnValue)from workers import Response
some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)
return_value = await stmt.first()
return Response.json(return_value){
"CustomerId": 11,
"CompanyName": "Bs Beverages",
"ContactName": "Victoria Ashworth"
}Získání konkrétního sloupce z prvního řádku:
const someVariable = `Bs Beverages`;
const stmt = env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(someVariable);
const returnValue = await stmt.first("CustomerId");
return Response.json(returnValue)from workers import Response
some_variable = "Bs Beverages"
stmt = self.env.DB.prepare("SELECT * FROM Customers WHERE CompanyName = ?").bind(some_variable)
return_value = await stmt.first("CustomerId")
return Response.json(return_value)11Pokyny
- Pokud dotaz vrátí řádky, ale
columnneexistuje, pakD1PreparedStatement::firstvyvoláD1_ERRORvýjimkou. D1PreparedStatement::firstnemění SQL dotaz. Pro zvýšení výkonu zvažte připojeníLIMIT 1k vašemu příkazu.- Při použití TypeScriptu můžete předat parametr typu na
D1PreparedStatement::firstk vrácení typovaného objektu výsledku.