Closed gwerbin closed 1 year ago
hey there -
the asyncpg
dialect only supports async engines:
This dialect should normally be used only with the create_async_engine() engine creation function
to use "asyncpg" with regular create_engine, there's a special mode you can use ?async_fallback=true
, like this:
e = create_engine(_db_url + "?async_fallback=true")
however, this wont run very efficiently. for create_engine()
I would stick with psycopg2
or psycopg
.
Yikes, of course. I knew there was something obvious I was missing, thank you.
A better way is to use run_sync
from an async session or connection
Describe the bug
I created an async engine and async sessionmaker for global use in the async areas of my application.
I also need to interact with the database from a non-async region of my application. However, creating a non-async session or connection invariably results in the
MissingGreenlet: greenlet_spawn has not been called ...
exception.This seems like a bug because it seems to be entirely obstructing the use of an entirely distinct engine and session that happens to connect to the same database. I would not expect the Greenlet spawn context to be globally associated with the database URI.
Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected
No response
SQLAlchemy Version in Use
2.0.15
DBAPI (i.e. the database driver)
asyncpg == 0.27.0
Database Vendor and Major Version
PostgreSQL 15 (TimescaleDB)
Python Version
3.10.11
Operating system
MacOS 12.4
To Reproduce
Contents of
mydb.py
:Error
Additional context
No response