SSL Certificate Error Issue before and after Python 3.11.13 with Databricks Instance

Open
#585 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
25/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
python
Domain
database, security

Research direction

Start with the provided pyproject.toml setup and main.py entry point, then run the uv command against a Databricks environment that requires an SSL certificate across the listed Python versions. Use results.log and the reported SSLVerificationError to compare behavior; done means the sample query returns its table row count on affected versions.

Written by the indexing model from the issue text.

Description

Overview

When I try to use different versions of python to connect to a databricks environment, I get an SSL certificate issue. It appears to be resolved in 3.11.13 but is broken in versions below (e.g. 3.11.11) and above (3.12, 3.13). Please note that you will need to test with an environment that require an ssl certificate.

Recreation Steps

  1. Setup environment as below
  2. Run script
uv run main.py --python 3.11.11

Expected - The script will output a row count for the specific table
Actual - An SSLVerificationError will happen

Hardware Info

  • macOS - 15.5
  • chip - Apple M4 Pro

Affected Python Version

  • 3.11.11, <3.11.13
  • > 3.11.13

Setup

setup uv project
uv init dbks_testing --python
sample uv project template
[project]
name = "dbks-testing"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
    "databricks-sqlalchemy>=2.0.6",
]
script to verify issue

you will need to change the table variable to a valid table for your schema

def main():

    access_token = os.getenv("DATABRICKS_TOKEN")
    server_hostname = os.getenv("DATABRICKS_SERVER_HOSTNAME")
    http_path = os.getenv("DATABRICKS_HTTP_PATH")
    catalog = os.getenv("DATABRICKS_CATALOG")
    schema = os.getenv("DATABRICKS_SCHEMA")

    engine = create_engine(
        url=f"databricks://token:{access_token}@{server_hostname}?" +
            f"http_path={http_path}&catalog={catalog}&schema={schema}"
    )

    session = Session(engine)

    account = Table(table, MetaData(schema=schema), autoload_with=engine)

    print(f"Table count for {account.name} is {session.query(account).count()}")


if __name__ == "__main__":

    # add logging
    logging.getLogger("databricks.sql").setLevel(logging.DEBUG)
    logging.basicConfig(filename="results.log",
                        level=logging.DEBUG,
                        format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")

    # set variables need for main
    table = "account"

    main()
Run command in project
uv run main.py --python 3.11.11
Dominant language
Python
Stars
233
Forks
152
Avg merge
21h 5m
Merged PRs (30d)
10

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from databricks/databricks-sql-python

All issues in databricks/databricks-sql-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.