Ejecutor de Consultas
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
¿Qué es un QueryRunner?
Cada nueva instancia de QueryRunner toma una única conexión del grupo de conexiones, si el RDBMS admite agrupación de conexiones. Para bases de datos que no admiten grupos de conexiones, utiliza la misma conexión en toda la fuente de datos.
La documentación completa de la API de QueryRunner se encuentra en la sección de migraciones.
Creando una nueva instancia de QueryRunner
Usa el método createQueryRunner para crear un nuevo QueryRunner:
const queryRunner = dataSource.createQueryRunner()
Usando QueryRunner
Después de crear una nueva instancia de QueryRunner, se adquirirá una conexión del grupo cuando realices la primera consulta:
const queryRunner = dataSource.createQueryRunner()
await queryRunner.query("SELECT 1")
await queryRunner.release()
También puedes usar el método connect para obtener directamente una conexión del grupo de conexiones:
const queryRunner = dataSource.createQueryRunner()
const clientConnection = await queryRunner.connect()
await queryRunner.release()
Importante: asegúrate de liberar el QueryRunner cuando ya no sea necesario para devolver la conexión al grupo de conexiones:
await queryRunner.release()
Una vez liberado el QueryRunner, ya no será posible usar los métodos del ejecutor de consultas.
QueryRunner también tiene su propia instancia de EntityManager, que puedes usar mediante la propiedad manager para ejecutar consultas de EntityManager en la conexión de base de datos específica utilizada por la instancia de QueryRunner:
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()
}
Gestión Explícita de Recursos
QueryRunner también admite gestión explícita de recursos:
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)
}
Al declarar un ejecutor de consultas de esta forma, se liberará automáticamente después de ejecutar la última sentencia en el ámbito contenedor.