SQLAlchemy JDBC/ODBC API
Modern, type-safe SQLAlchemy dialect for JDBC and ODBC connections with native Python implementation.
Community Help Needed: We don't have access to all database systems for thorough testing. If you encounter issues connecting to a particular database, please raise an issue - we rely on community feedback to improve support for all databases.
Features
- Automatic JDBC driver download from Maven Central (zero configuration!)
- ODBC support for native database connectivity
- Full SQLAlchemy integration (ORM, reflection, Alembic, Inspector API)
- DataFrame integration (pandas, polars, pyarrow)
- ️ 18 database dialects (PostgreSQL, Oracle, MySQL, MariaDB, SQL Server, DB2, SQLite, OceanBase, GBase 8s, IBM iSeries, MS Access, Apache Phoenix)
- Asyncio support for Core and ORM operations
- HikariCP connection pooling for high-performance connections
- Database X-Ray for query monitoring and performance tracing
- Modern Python 3.10+ with full type hints
- SQLAlchemy 2.0+ compatible
Installation
# Basic installation
pip install sqlalchemy-jdbcapi
# With DataFrame support
pip install sqlalchemy-jdbcapi[dataframe]
# With ODBC support
pip install sqlalchemy-jdbcapi[odbc]
JDBC Requirements
JDBC requires Java Runtime Environment (JRE) 8+:
# Check Java installation
java -version
# Install on Ubuntu/Debian
sudo apt-get install default-jre
# Install on macOS
brew install openjdk
Quick Start
JDBC (Recommended - Auto-Download)
from sqlalchemy import create_engine
# PostgreSQL - driver downloads automatically!
engine = create_engine('jdbcapi+postgresql://user:password@localhost/mydb')
# Oracle
engine = create_engine('jdbcapi+oracle://user:password@localhost:1521/ORCL')
# MySQL
engine = create_engine('jdbcapi+mysql://user:password@localhost/mydb')
ODBC (Alternative - No JVM)
from sqlalchemy import create_engine
# Requires OS-installed ODBC driver
engine = create_engine('odbcapi+postgresql://user:password@localhost/mydb')
Usage Example
from sqlalchemy import create_engine, text
engine = create_engine('jdbcapi+postgresql://user:pass@localhost/db')
with engine.connect() as conn:
result = conn.execute(text("SELECT * FROM users"))
for row in result:
print(row)
Documentation
📖 Full Documentation (Recommended)
Quick Links
- Quick Start Guide - Get started in 5 minutes
- Usage Guide - Comprehensive examples
- Drivers Guide - Driver installation & configuration
- SQLAlchemy Integration - ORM, reflection, Alembic
- Examples - Code examples for all databases
- Troubleshooting - Common issues & solutions
Supported Databases
| Database | JDBC | ODBC | Auto-Download | Async |
|---|---|---|---|---|
| PostgreSQL | ✅ | ✅ | ✅ | ✅ |
| Oracle | ✅ | ✅ | ✅ | ✅ |
| MySQL | ✅ | ✅ | ✅ | ✅ |
| MariaDB | ✅ | ✅ | ✅ | ✅ |
| SQL Server | ✅ | ✅ | ✅ | ✅ |
| DB2 | ✅ | ❌ | ✅ | ✅ |
| SQLite | ✅ | ❌ | ✅ | ✅ |
| OceanBase | ✅ | ❌ | ✅ | ❌ |
| GBase 8s | ✅ | ❌ | ✅ | ❌ |
| IBM iSeries | ✅ | ❌ | ✅ | ❌ |
| MS Access | ✅ | ❌ | ✅ | ❌ |
| Apache Phoenix | ✅ | ❌ | ✅ | ❌ |
See Drivers Guide for detailed configuration.
What's New in 2.1
Version 2.1 adds major new capabilities:
- New database dialects: GBase 8s, IBM iSeries, MS Access, Apache Phoenix/Avatica
- Asyncio support: Full async/await for Core and ORM operations
- HikariCP integration: High-performance connection pooling
- Database X-Ray: Query monitoring, metrics, and performance tracing
- Docker test suite: Functional tests with real databases
What's New in 2.0
Version 2.0 was a complete modernization:
- Native JDBC implementation (replaced JayDeBeApi)
- Added ODBC support
- DataFrame integration (pandas, polars, pyarrow)
- Full SQLAlchemy native dialect (ORM, reflection, Alembic)
- Expanded from 3 to 12 database dialects
- Modern Python 3.10+ with complete type hints
- SQLAlchemy 2.0+ support
See CHANGELOG.md for migration guide.
Contributing
We welcome contributions! Please see:
- CONTRIBUTING.md - Contribution guidelines
- CODE_OF_CONDUCT.md - Community guidelines
- SECURITY.md - Security policy
Development
# Clone repository
git clone https://github.com/daneshpatel/sqlalchemy-jdbcapi.git
cd sqlalchemy-jdbcapi
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest tests/
# Run linting
ruff check src tests
See Contributing Guide for detailed instructions.
License
This project is licensed under the Apache License 2.0 - see LICENSE file for details.
Links
- Documentation - Full documentation
- PyPI - Package on PyPI
- GitHub - Source code
- Issues - Bug reports & feature requests
- Changelog - Version history
Support
- Issues: Report bugs or request features on GitHub Issues
- Discussions: Ask questions on GitHub Discussions
Metadata
Release files for sqlalchemy-jdbcapi 2.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sqlalchemy_jdbcapi-2.2.1.tar.gz | 68.9 kB | Without provenance | Details for sqlalchemy_jdbcapi-2.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sqlalchemy_jdbcapi-2.2.1-py3-none-any.whl | Python 3 | none | any | Details for sqlalchemy_jdbcapi-2.2.1-py3-none-any.whl |
Total release size: 150.7 kB
Release files / sqlalchemy_jdbcapi-2.2.1.tar.gz
| Download URL | sqlalchemy_jdbcapi-2.2.1.tar.gz |
|---|---|
| Size | 68.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6cf836aa3645a8784e6ff1bb66e1d15fa17c06b476b1594327a1759ba74a84cf
|
|
BLAKE2b-256 checksum How to use checksums |
729a415897121cf8618c7f4c95a6845b8fdf97066aa9ebee4ab64bb1f3d86dea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / sqlalchemy_jdbcapi-2.2.1-py3-none-any.whl
| Download URL | sqlalchemy_jdbcapi-2.2.1-py3-none-any.whl |
|---|---|
| Size | 81.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
634e17f8b0bd0920553a06fcea6a49e2f9d2f97980af0974fecf3e23ca4322f8
|
|
BLAKE2b-256 checksum How to use checksums |
46638f52fd457056698caba102a70ef471c6f669aead8b97f8ea99bb05445e34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Security for sqlalchemy-jdbcapi 2.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.