FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Database drivers become optional extras · Issue #1626 · datajoint/datajoint-python · GitHub

Repository navigation

Database drivers become optional extras #1626

Open

Description

Motivation

DataJoint supports two production database backends, PostgreSQL and MySQL, but the two drivers are packaged differently:

  • pymysql (MySQL) is a core dependency. Every pip install datajoint installs it, including installs that only ever connect to PostgreSQL.
  • psycopg2-binary (PostgreSQL) is the optional datajoint[postgres] extra.

import datajoint also imports pymysql at load time, through the adapter registry, and imports psycopg2 too when it happens to be installed. A process that never connects to a database still loads both drivers.

Treating the backends alike means each driver is installed only when it is needed. It also leaves room for more backends later without adding a hard dependency for each one.

The change

  • Every database driver becomes an optional extra:

    • pip install "datajoint[postgres]" installs psycopg2-binary
    • pip install "datajoint[mysql]" installs pymysql (same >=0.7.2 floor as today)
  • A bare pip install datajoint installs no database driver, and import datajoint loads none.

  • Each adapter imports its driver when a connection is made. When the driver is missing, connecting raises a DataJointError that names the extra, e.g.:

    The MySQL backend requires the pymysql driver, which is not installed. Install it with: pip install "datajoint[mysql]"
    

    The PostgreSQL adapter raises the same kind of error. It used to raise ImportError.

  • The PostgreSQL adapter imports the psycopg2 module, so either the psycopg2 or the psycopg2-binary distribution satisfies it.

  • The test dependency group and the test and dev extras install every driver.

  • conda has no extras, so the conda-forge package keeps listing the drivers as run requirements.

Migration for MySQL users

  • Install the MySQL extra: pip install "datajoint[mysql]". In a requirements file, write datajoint[mysql] in place of datajoint.
  • An upgrade in place keeps a pymysql that is already installed. A fresh environment built from a requirements file that lists only datajoint has no driver, and the first connection says which extra to install.
  • Code that caught ImportError from PostgreSQLAdapter() should catch DataJointError.

Activity

  1. added this to the v2.4 milestone on Oct 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementIndicates new improvements

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions


      Back | FazBrowse Home | New Git URL