Databricks SQL Handler
A comprehensive Python package for interacting with Databricks SQL warehouses using Pydantic models, OAuth authentication, and robust connection management.
Features
- OAuth Authentication: Secure client credentials flow authentication
- Pydantic Models: Type-safe data models for query results
- Connection Management: Robust connection handling with automatic retry logic
- Query Execution: Execute single or multiple queries with structured results
- Built-in Models: Pre-defined models for common Databricks operations
- Extensible: Easy to extend with custom data models
- CLI Interface: Interactive command-line interface for testing and development
Installation
pip install dbxsql
Quick Start
Basic Usage
from dbxsql import QueryHandler, DatabricksSettings, NexsysRecord
# Configure settings (or use environment variables)
settings = DatabricksSettings(
client_id="your_client_id",
client_secret="your_client_secret",
server_hostname="your_databricks_hostname",
http_path="/sql/1.0/warehouses/your_warehouse_id"
)
# Use as context manager
with QueryHandler(settings) as handler:
# Execute a simple query
result = handler.execute_query("SELECT * FROM my_table LIMIT 10")
# Execute with Pydantic model parsing
result = handler.execute_query(
"SELECT * FROM nexsys_table LIMIT 10",
NexsysRecord
)
# Access structured data
for record in result.data:
print(f"ID: {record.id}, Name: {record.name}")
Environment Variables
Create a .env file:
DATABRICKS_CLIENT_ID=your_client_id
DATABRICKS_CLIENT_SECRET=your_client_secret
DATABRICKS_SERVER_HOSTNAME=your_hostname.databricks.com
DATABRICKS_HTTP_PATH=/sql/1.0/warehouses/warehouse_id
DATABRICKS_LOG_LEVEL=INFO
CLI Usage
# Interactive mode
dbxsql --interactive
# Run example queries
dbxsql --examples
# Execute a single query
dbxsql --query "SELECT current_timestamp()"
Custom Models
Create your own Pydantic models:
from pydantic import BaseModel
from datetime import datetime
from typing import Optional
class MyCustomModel(BaseModel):
id: int
name: str
created_at: datetime
amount: Optional[float] = None
# Register the model
from dbxsql import register_model
register_model("my_custom", MyCustomModel)
# Use it in queries and get a list of MyCustomModels
result = handler.execute_query("SELECT * FROM my_table", "my_custom")
Configuration
All configuration can be done via environment variables with the DATABRICKS_ prefix or programmatically:
| Setting | Environment Variable | Default | Description |
|---|---|---|---|
| client_id | DATABRICKS_CLIENT_ID | Required | OAuth client ID |
| client_secret | DATABRICKS_CLIENT_SECRET | Required | OAuth client secret |
| server_hostname | DATABRICKS_SERVER_HOSTNAME | Required | Databricks hostname |
| http_path | DATABRICKS_HTTP_PATH | Required | SQL warehouse HTTP path |
| log_level | DATABRICKS_LOG_LEVEL | INFO | Logging level |
| max_retries | DATABRICKS_MAX_RETRIES | 3 | Query retry attempts |
| query_timeout | DATABRICKS_QUERY_TIMEOUT | 300 | Query timeout (seconds) |
API Reference
QueryHandler
Main class for executing queries and managing connections.
Methods
execute_query(query, model_class=None): Execute single queryexecute_multiple_queries(queries, model_classes=None): Execute multiple queriesexecute_query_with_retry(query, model_class=None): Execute with automatic retrylist_files(path): List files in Databricks pathshow_tables(database=None): Show tables in databasetest_connection(): Test database connectivity
Built-in Models
NexsysRecord: For NEXSYS system dataSalesRecord: For sales transaction dataFileInfo: For file listing resultsTableInfo: For table informationGenericRecord: For unknown data structures
Error Handling
The package provides specific exceptions:
from dbxsql import (
AuthenticationError,
ConnectionError,
QueryExecutionError,
SyntaxError,
TimeoutError,
DataParsingError
)
try:
result = handler.execute_query("SELECT * FROM table")
except AuthenticationError:
print("Authentication failed")
except QueryExecutionError as e:
print(f"Query failed: {e}")
Troubleshooting
CERTIFICATE_VERIFY_FAILED
Sometimes, depending on an operational system the next error message could be returned:
dbxsql.exceptions.ConnectionError: Failed to connect to Databricks: Error during request to server: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1007)
This error can be fixed by setting an environment variable SSL_CERT_FILE. This can be done in a terminal:
export SSL_CERT_FILE=/path/to/databricks.pem
or directly in the code:
import os
import certifi
from dbxsql import QueryHandler
from dbxsql.settings import settings
from dbxsql.main import ApplicationRunner
os.environ["SSL_CERT_FILE"] = certifi.where()
with QueryHandler(settings) as handler:
app_runner = ApplicationRunner(handler)
app_runner.run_example_queries()
License
MIT License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Release files for dbxsql 1.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dbxsql-1.0.5.tar.gz | 15.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbxsql-1.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.6 kB
Release files / dbxsql-1.0.5.tar.gz
| Download URL | dbxsql-1.0.5.tar.gz |
|---|---|
| Size | 15.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c755ef036132dc39f8e302c931996c32a58035ccfa205b713d283b152cc647f3
|
|
BLAKE2b-256 checksum How to use checksums |
3015d0553fb96628dbc16332e98fc652f6322f00bd774c546d5fe4edf0384ab8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.13
|
Release files / dbxsql-1.0.5-py3-none-any.whl
| Download URL | dbxsql-1.0.5-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9577059b146757217cf8171582c473c5d507f59f5b359fec6b41f25674f717da
|
|
BLAKE2b-256 checksum How to use checksums |
f3a363ad9cce4ccc02e0dc15b33f42122736fd174a596549c5d13db3c4ff1a8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.13
|