Skip to main content

Query Runner

What is a QueryRunner?​

Each new QueryRunner instance takes a single connection from connection pool, if RDBMS supports connection pooling. For databases not supporting connection pools, it uses the same connection across the entire data source.

Creating a new QueryRunner instance​

Use createQueryRunner method to create a new QueryRunner:

const queryRunner = dataSource.createQueryRunner()

Using QueryRunner​

After you create a new instance of QueryRunner use connect method to actually get a connection from the connection pool:

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

Important: make sure to release it when it is not necessary anymore to make it available to the connection pool again:

await queryRunner.release()

After connection is released, it is not possible to use the query runner methods.

QueryRunner has a bunch of methods you can use, it also has its own EntityManager instance, which you can use through manager property to run EntityManager methods on a particular database connection used by QueryRunner instance:

const queryRunner = dataSource.createQueryRunner()

// take a connection from the connection pool
await queryRunner.connect()

// use this particular connection to execute queries
const users = await queryRunner.manager.find(User)

// remember to release connection after you are done using it
await queryRunner.release()