Query Runner
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.