Database Drivers

Libraries for connecting and operating databases.

Each database calls for a Python database driver built for it. Reach PostgreSQL through Psycopg, and MySQL through mysqlclient. sqlite3 comes with Python.

How to choose:

Listed in editorial order, grouped by use case. Click a column header to re-sort the whole list.

Press / to search. Tags open their category. Click a row for details.

Search and filter

Results

Row number Tags

MySQL 2 projects

A pure-Python MySQL and MariaDB client library, based on PEP 249.
PyMySQL/github.com/PyMySQL/PyMySQL /7,856 stars /
MySQL and MariaDB connector (MySQLdb1 fork).
PyMySQL/github.com/PyMySQL/mysqlclient /2,539 stars /

PostgreSQL 3 projects

A PostgreSQL adapter for Python, the successor to psycopg2.
psycopg/github.com/psycopg/psycopg /2,516 stars /
A fast PostgreSQL database client library for Python/asyncio.
MagicStack/github.com/MagicStack/asyncpg /8,117 stars /
pgvector support for Python, adding vector types and similarity search to psycopg, asyncpg, SQLAlchemy, and Django.

SQLite 3 projects

(Python standard library) SQLite interface compliant with DB-API 2.0.
Another Python SQLite Wrapper, exposing the complete SQLite C API.
rogerbinns/github.com/rogerbinns/apsw /954 stars /
Python CLI utility and library for manipulating SQLite databases.
simonw/github.com/simonw/sqlite-utils /2,180 stars /

ClickHouse 2 projects

The official ClickHouse client, with SQLAlchemy and Superset connectors.
Python driver with native interface for ClickHouse.

Other Relational Databases 3 projects

An ODBC bridge for connecting to SQL Server and any other ODBC-accessible database.
mkleehammer/github.com/mkleehammer/pyodbc /3,091 stars /
The official Python driver for Oracle Database, successor to cx_Oracle.
oracle/github.com/oracle/python-oracledb /456 stars /
Official Microsoft driver for SQL Server and Azure SQL, built on ODBC for high performance.

NoSQL Databases 3 projects

The Python client for Redis.
redis/github.com/redis/redis-py /13,653 stars /
The official Python client for MongoDB.
The Python driver for Apache Cassandra.

Database Drivers guide

Psycopg is the PostgreSQL driver Django recommends. One design serves sync and async code: AsyncConnection and AsyncCursor mirror the sync classes, so you mostly add await. Open each connection in a with block. It commits when the block ends, rolls back on an exception, and closes the connection either way.

asyncpg is built for asyncio only, and skips DB-API on purpose to fit PostgreSQL better. In a server, create a pool with asyncpg.create_pool() at startup, then take a connection per request with async with pool.acquire().

pgvector adds the vector types and distance operators of the pgvector Postgres extension to Psycopg, asyncpg, SQLAlchemy, and Django. Enable the extension with CREATE EXTENSION IF NOT EXISTS vector, then register the types on each connection with register_vector(), or in your pool's connection hook. To find nearest neighbors, order by distance, with <-> for L2.

Django calls mysqlclient the recommended choice for MySQL, and ships its own adapter for it. It's a native driver built against MySQL's client library. Where you can't install that library and its headers, use PyMySQL, which SQLAlchemy calls a pure Python port of MySQLdb that targets full compatibility. The licenses differ too: mysqlclient is GPL, and PyMySQL is MIT.

sqlite3 comes with Python, and SQLite needs no server. Use the connection as a context manager: it commits when the block succeeds and rolls back when it raises.

APSW wraps SQLite's complete C API. Unlike sqlite3, it makes no effort to hide how SQLite differs from other databases. Its docs suggest it when you want SQLite's own features, and sqlite3 when you want DB-API and an easy switch to another database. At startup, call apsw.bestpractice.apply(apsw.bestpractice.recommended) before opening any connection. It configures SQLite for best performance and catches common mistakes.

sqlite-utils sits on top of sqlite3 to create and fill databases, not to be a full ORM. Pass insert_all() a list of dicts, and it creates the table and columns for you. Its command-line tool pipes JSON or CSV straight into a new database file.

clickhouse-connect is ClickHouse's official client and talks HTTP, so it works through load balancers, proxies, and enterprise network controls. clickhouse-driver uses the native TCP protocol instead, which its docs say is more configurable and sends compact binary data.

pyodbc reaches any database through that database's ODBC driver, plus one driver manager for all of them. Windows has one built in; on macOS and Unix, you install one first. For SQL Server and Azure SQL, Microsoft's own mssql-python connects without an external driver manager.

python-oracledb is Oracle's official driver. In its default Thin mode, it connects straight to Oracle Database without Oracle Client libraries.

redis-py is the Python client for Redis, and MongoDB's docs call PyMongo the recommended way to work with MongoDB from Python. cassandra-driver talks to Apache Cassandra over Cassandra's binary protocol, with sync and async APIs.

With any SQL database, pass values as query parameters instead of formatting them into the SQL string. The sqlite3 docs say this avoids SQL injection. For more per database, see awesome-mysql, awesome-postgres, and awesome-sqlite.

Know a project that belongs here?

Tell us what it does and why it stands out.