Connecting to a Postgres database
p3orm allows you to connect either with a direct connection or with a connection pool. You can only connect with one of these at a time on a single instance. If you attempt to establish a new connection or pool while one already exists, p3orm will raise a p3orm.exceptions.AlreadyConnected
exception.
Regular connections
With p3orm you can open a single connection to the database. This is useful for simpler short lived applications like a script. You can open a connection by using the PostgresDriver.connect
method.
from p3orm import postgres
await postgres().connect(dsn=...)
# or
await postgres().connect(user=..., password=..., database=..., host=..., port=...)
This will create an underlying asyncpg.Connection
which is available for inspection as a property on your instance as postgres().connection
. You can also pass keyword arguments directly down into the asyncpg.connect
method.
Connection pooling
For many applications like web servers, it's advisable to use a connection pool.
from p3orm import postgres
await postgres().connect_pool(dsn=...)
# or
await postgres().connect_pool(user=..., password=..., database=..., host=..., port=...)
This will create an underlying asyncpg.Pool
which is available for inspection as a property on your instance as postgres().pool
. You can also pass keyword arguments directly down into the asyncpg.create_pool
method. Some of these configuration options that are typically modified include min_size
, max_size
, and max_inactive_connection_lifetime
which can be tuned to affect the performance of your application.
Disconnecting
This method will close the existing asyncpg.Connection
or asyncpg.Pool
and remove it from the instance.