True async query execution

Abierto
#9 19 comentarios 24 reacciones 1 asignado Ver en GitHub

@sumitmsft ya está trabajando en esto.

Desde el 3/3/2025.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

area: api-compliance enhancement triage done
Is your feature request related to a problem? Please describe.

Currently, mssql-python does not support true async execution, forcing developers to use thread-based workarounds (asyncio.to_thread() or aioodbc). This leads to performance limitations, increased memory usage, and suboptimal scalability in high-throughput applications, such as web servers and data processing pipelines.

For applications using FastAPI, Django Async, or AI/ML workloads, true async support is critical for handling multiple concurrent database operations efficiently. Without it, developers face blocking I/O that slows down event-driven applications.

Describe the solution you'd like
  • Truly non-blocking I/O using asyncio (asyncio.StreamReader / asyncio.StreamWriter).
  • Async query execution with await conn.execute("SELECT ...").
  • Streaming large result sets asynchronously using async for row in cursor.
  • Better scalability for FastAPI, Django Async, and other async frameworks.
Example API:
async def stream_users():
    conn = await asyncpg.connect(...)
    
    async with conn.transaction():  # Ensures rollback on failure
        async for row in conn.cursor("SELECT * FROM users"):
            print(row)  # Process each row asynchronously
    
    await conn.close()

asyncio.run(stream_users())

### Describe alternatives you've considered

- asyncio.to_thread() → Still uses blocking I/O and threads, increasing overhead.
- aioodbc → Uses a thread pool, not true async, leading to performance bottlenecks.
- Custom Thread Management → Adds complexity and does not scale well under high concurrency.

### Additional context
Lenguaje dominante
Python
Estrellas
473
Forks
60
Merge medio
2 d 11 h
PR fusionados (30 d)
36

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/mssql-python

Todos los issues de microsoft/mssql-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.