Zum Hauptinhalt springen

Query Runner

Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Was ist ein QueryRunner?

Jede neue QueryRunner-Instanz bezieht eine einzelne Verbindung aus dem Verbindungspool, sofern das RDBMS Verbindungspools unterstützt. Bei Datenbanken ohne Verbindungspool-Unterstützung wird dieselbe Verbindung für die gesamte Datenquelle verwendet.

Die vollständige QueryRunner-API ist im Migrations-Abschnitt dokumentiert.

Erstellen einer neuen QueryRunner-Instanz

Verwende die createQueryRunner-Methode, um einen neuen QueryRunner zu erstellen:

const queryRunner = dataSource.createQueryRunner()

Verwendung von QueryRunner

Nachdem Sie eine neue Instanz von QueryRunner erstellt haben, wird beim Ausführen der ersten Abfrage eine Verbindung aus dem Pool bezogen:

const queryRunner = dataSource.createQueryRunner()
await queryRunner.query("SELECT 1")
await queryRunner.release()

Sie können auch die connect-Methode verwenden, um direkt eine Verbindung aus dem Verbindungspool zu erhalten:

const queryRunner = dataSource.createQueryRunner()
const clientConnection = await queryRunner.connect()
await queryRunner.release()

Wichtig: Geben Sie den QueryRunner unbedingt frei, wenn er nicht mehr benötigt wird, um die Verbindung an den Verbindungspool zurückzugeben:

await queryRunner.release()

Nachdem der QueryRunner freigegeben wurde, können dessen Methoden nicht mehr verwendet werden.

QueryRunner besitzt auch eine eigene EntityManager-Instanz, die Sie über die manager-Eigenschaft nutzen können, um EntityManager-Abfragen auf der spezifischen Datenbankverbindung auszuführen, die von der QueryRunner-Instanz verwendet wird:

let queryRunner: QueryRunner
try {
queryRunner = dataSource.createQueryRunner()
// use a single database connection to execute multiple queries
await queryRunner.manager.update(
Employee,
{ level: "junior" },
{ bonus: 0.2 },
)
await queryRunner.manager.update(
Employee,
{ level: "senior" },
{ bonus: 0.1 },
)
} catch (error) {
console.error(error)
} finally {
// remember to release connection after you are done using it
await queryRunner.release()
}

Explizite Ressourcenverwaltung

QueryRunner unterstützt auch explizite Ressourcenverwaltung:

async function updateSalaries() {
await using queryRunner = dataSource.createQueryRunner()
await queryRunner.manager.update(
Employee,
{ level: "junior" },
{ bonus: 0.2 },
)
await queryRunner.manager.update(
Employee,
{ level: "senior" },
{ bonus: 0.1 },
)
// no need anymore to manually release the QueryRunner
}

try {
await updateSalaries()
} catch (error) {
console.error(error)
}

Bei dieser Deklarationsweise wird der Query Runner automatisch freigegeben, nachdem die letzte Anweisung im umschließenden Gültigkeitsbereich ausgeführt wurde.