from piccolo.engine.cockroach import CockroachEngine

DB = CockroachEngine(config={
    'host': 'localhost',
    'database': 'piccolo',
    'user': 'root',
    'password': '',
    'port': '26257',


The config dictionary is passed directly to the underlying database adapter, asyncpg. See the asyncpg docs to learn more.

Connection pool

To use a connection pool, you need to first initialise it. The best place to do this is in the startup event handler of whichever web framework you are using.

Here’s an example using Starlette. Notice that we also close the connection pool in the shutdown event handler.

from piccolo.engine import engine_finder
from starlette.applications import Starlette

app = Starlette()

async def open_database_connection_pool():
    engine = engine_finder()
    await engine.start_connection_pool()

async def close_database_connection_pool():
    engine = engine_finder()
    await engine.close_connection_pool()


Using a connection pool helps with performance, since connections are reused instead of being created for each query.

Once a connection pool has been started, the engine will use it for making queries.


If you’re running several instances of an app on the same server, you may prefer an external connection pooler - like pgbouncer.


The connection pool uses the same configuration as your engine. You can also pass in additional parameters, which are passed to the underlying database adapter. Here’s an example:

# To increase the number of connections available:
await engine.start_connection_pool(max_size=20)


class piccolo.engine.cockroach.CockroachEngine(config: Dict[str, Any], extensions: Sequence[str] = (), log_queries: bool = False, log_responses: bool = False, extra_nodes: Optional[Dict[str, CockroachEngine]] = None)

An extension of PostgresEngine.