psqlpy
psqlpy copied to clipboard
Context manager for ConnectionPool#connection method
ATM to use connection we need to write the following code:
connection_pool = psqlpy.ConnectionPool()
conn = await connection_pool.connection()
conn.execute("SELECT * from users")
But it would be more pythonic to use context manager here like:
connection_pool = psqlpy.ConnectionPool()
async with connection_pool.connection() as conn:
conn.execute("SELECT * from users")
Hi! Thank you for the issue.
This idea is great, but It has some cons.
We have an asynchronous connection() method because we need to make an asynchronous call to the database pool.
When we get a connection that can be used in a context manager, it must have some magical method and access to the ConnectionPool.
If we want to have 2 ways of connection declaration, we need to be available to start it explicitly, like Transaction has a begin method.
Example:
# First without context manager
...
conn = connection_pool.connection()
await conn.start()
# Second with a context manager
...
async with connection_pool.connection() as conn:
It seems a bit complicated to me with some start method for connection.
If you have another opinion please share it.
I've started implementing this, but I'm faced with performance issues. https://github.com/qaspen-python/psqlpy/pull/36
So, it will take time to understand how to do it in another way.
It's implemented in release https://github.com/qaspen-python/psqlpy/releases/tag/0.7.0 with the acquire method.