Hi all, I've been having a lot of fun trying to optimize an async data retrieval system, but am in need of tracking when connections are checked in and out so I can debug overloading the connection pool. The documentation was of course helpful in the synchronous case for adding listeners on 'checkin' and 'checkout', but not so much for async.
I finally came across this SO post <https://stackoverflow.com/questions/67874092/sqlalchemy-1-4-async-event-listeners> where the OP was getting a helpful error message stating that async listeners were not supported, and to use `{async_engine}.sync_engine` to register listeners to (which solves my problem, too), but wanted to check in about the error I'm getting instead. With SQLAlchemy 1.4.29 on Python 3.10 (with asyncpg), the following produces a cryptic traceback rather than a pointed error message. Is this a consequence of partial support for async listeners at this time? """ async_engine = create_async_engine(...) Session = sessionmaker(bind=async_engine, class_=AsyncSession) @event.listens_for(async_engine, 'checkout') def receive_checkout(dbapi_connection, connection_record, connection_proxy): print(f'Session checked out at {datetime.now()}') print(f'\t{dbapi_connection}') print(f'\t{connection_record}') print(f'\t{connection_proxy}') async with Session() as session: result = await session.execute( text('SELECT version();') ) print(result.scalar()) """ """ Error Traceback (most recent call last): File "/home/brendan/PycharmProjects/db_utils/venv/lib/python3.10/site-packages/sqlalchemy/event/base.py", line 104, in __getattr__ ls = self._empty_listeners[name] KeyError: 'checkout' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/brendan/PycharmProjects/db_utils/test/test_database.py", line 153, in test_listeners_on_async_engine asyncio.run(self.run_test_listeners_on_async_engine()) File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete return future.result() File "/home/brendan/PycharmProjects/db_utils/test/test_database.py", line 139, in run_test_listeners_on_async_engine def recieve_checkout(dbapi_connection, connection_record, connection_proxy): File "/home/brendan/PycharmProjects/db_utils/venv/lib/python3.10/site-packages/sqlalchemy/event/api.py", line 160, in decorate listen(target, identifier, fn, *args, **kw) File "/home/brendan/PycharmProjects/db_utils/venv/lib/python3.10/site-packages/sqlalchemy/event/api.py", line 115, in listen _event_key(target, identifier, fn).listen(*args, **kw) File "/home/brendan/PycharmProjects/db_utils/venv/lib/python3.10/site-packages/sqlalchemy/event/registry.py", line 213, in listen dispatch_collection = getattr(target.dispatch, identifier) File "/home/brendan/PycharmProjects/db_utils/venv/lib/python3.10/site-packages/sqlalchemy/event/base.py", line 106, in __getattr__ raise AttributeError(name) AttributeError: checkout """ I'm happy to contribute to documentation if it'll be of any help. Cheers, Brendan -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/71f69936-7f0d-419d-8350-664ee296da61n%40googlegroups.com.