How does Django handles async ORM queries?

Hello there! I’m very new to Django’s internals, and something’s been troubling me with asynchronous support.

For context, I’m using Django along a discord.py bot, meaning the context is always asynchronous, all my queries have to be done async.
Recently I’ve been trying to access the internal psycopg connection object to access the .copy method, but I noticed the connection returned is synchronous, where AsyncConnection exists for asynchronous queries. After further searching, I also noticed most of the asynchronous ORM methods are just the synchronous methods wrapped in sync_to_async.

So here’s my question, how does Django manage async?
If the database backends calls are synchronous, how does Django actually achieve asynchronicity? I’ve ran some tests myself before, and long running queries do not block the asyncio event loop, so something must be happening for it to work, but I cannot understand where and how the magic happens.

I got my answers in the following threads and documents

So it’s basically not async, calls are made in new threads, but all the queries will join back to the same connection thread regardless, one after another.

Someone already made a PR to use the asynchronous driver of psycopg3 here: Support async database backends by domingues · Pull Request #17275 · django/django · GitHub , but no maintainer replied yet. Is there even a ticket for that in Django’s tracking?