freshcrate
Home > Databases > dj-database-url

dj-database-url

Use Database URLs in your Django Application.

Description

DJ-Database-URL ~~~~~~~~~~~~~~~ .. image:: https://jazzband.co/static/img/badge.png :target: https://jazzband.co/ :alt: Jazzband .. image:: https://github.com/jazzband/dj-database-url/actions/workflows/test.yml/badge.svg :target: https://github.com/jazzband/dj-database-url/actions/workflows/test.yml .. image:: https://codecov.io/gh/jazzband/dj-database-url/branch/master/graph/badge.svg?token=7srBUpszOa :target: https://codecov.io/gh/jazzband/dj-database-url This simple Django utility allows you to utilize the `12factor <http://www.12factor.net/backing-services>`_ inspired ``DATABASE_URL`` environment variable to configure your Django application. The ``dj_database_url.config`` method returns a Django database connection dictionary, populated with all the data specified in your URL. There is also a `conn_max_age` argument to easily enable Django's connection pool. If you'd rather not use an environment variable, you can pass a URL in directly instead to ``dj_database_url.parse``. Installation ------------ Installation is simple: .. code-block:: console $ pip install dj-database-url Usage ----- 1. If ``DATABASES`` is already defined: - Configure your database in ``settings.py`` from ``DATABASE_URL``: .. code-block:: python import dj_database_url DATABASES['default'] = dj_database_url.config( conn_max_age=600, conn_health_checks=True, ) - Provide a default: .. code-block:: python DATABASES['default'] = dj_database_url.config( default='postgres://...', conn_max_age=600, conn_health_checks=True, ) - Parse an arbitrary Database URL: .. code-block:: python DATABASES['default'] = dj_database_url.parse( 'postgres://...', conn_max_age=600, conn_health_checks=True, ) 2. If ``DATABASES`` is not defined: - Configure your database in ``settings.py`` from ``DATABASE_URL``: .. code-block:: python import dj_database_url DATABASES = { 'default': dj_database_url.config( conn_max_age=600, conn_health_checks=True, ), } - You can provide a default, used if the ``DATABASE_URL`` setting is not defined: .. code-block:: python DATABASES = { 'default': dj_database_url.config( default='postgres://...', conn_max_age=600, conn_health_checks=True, ) } - Parse an arbitrary Database URL: .. code-block:: python DATABASES = { 'default': dj_database_url.parse( 'postgres://...', conn_max_age=600, conn_health_checks=True, ) } ``conn_max_age`` sets the |CONN_MAX_AGE setting|__, which tells Django to persist database connections between requests, up to the given lifetime in seconds. If you do not provide a value, it will follow Django’s default of ``0``. Setting it is recommended for performance. .. |CONN_MAX_AGE setting| replace:: ``CONN_MAX_AGE`` setting __ https://docs.djangoproject.com/en/stable/ref/settings/#conn-max-age ``conn_health_checks`` sets the |CONN_HEALTH_CHECKS setting|__ (new in Django 4.1), which tells Django to check a persisted connection still works at the start of each request. If you do not provide a value, it will follow Django’s default of ``False``. Enabling it is recommended if you set a non-zero ``conn_max_age``. .. |CONN_HEALTH_CHECKS setting| replace:: ``CONN_HEALTH_CHECKS`` setting __ https://docs.djangoproject.com/en/stable/ref/settings/#conn-health-checks Strings passed to `dj_database_url` must be valid URLs; in particular, special characters must be url-encoded. The following url will raise a `ValueError`: .. code-block:: plaintext postgres://user:p#ssword!@localhost/foobar and should instead be passed as: .. code-block:: plaintext postgres://user:p%23ssword!@localhost/foobar `TEST <https://docs.djangoproject.com/en/stable/ref/settings/#test>`_ settings can be configured using the ``test_options`` attribute:: DATABASES['default'] = dj_database_url.config(default='postgres://...', test_options={'NAME': 'mytestdatabase'}) Supported Databases ------------------- Support currently exists for PostgreSQL, PostGIS, MySQL, MySQL (GIS), Oracle, Oracle (GIS), Redshift, CockroachDB, Timescale, Timescale (GIS) and SQLite. If you want to use some non-default backends, you need to register them first: .. code-block:: python import dj_database_url # registration should be performed only once dj_database_url.register("mysql-connector", "mysql.connector.django") assert dj_database_url.parse("mysql-connector://user:password@host:port/db-name") == { "ENGINE": "mysql.connector.django", # ...other connection params } Some backends need further config adjustments (e.g. oracle and mssql expect ``PORT`` to be a string). For such cases you can provide a post-processing function t

Release History

VersionChangesUrgencyDate
3.1.2Imported from PyPI (3.1.2)Low4/21/2026
v3.1.2## What's Changed * Bump cryptography from 46.0.3 to 46.0.5 by @dependabot[bot] in https://github.com/jazzband/dj-database-url/pull/293 * Bump django from 5.2.9 to 5.2.11 by @dependabot[bot] in https://github.com/jazzband/dj-database-url/pull/294 * Bump urllib3 from 2.6.2 to 2.6.3 by @dependabot[bot] in https://github.com/jazzband/dj-database-url/pull/295 * Bump wheel from 0.45.1 to 0.46.2 by @dependabot[bot] in https://github.com/jazzband/dj-database-url/pull/296 * [pre-commit.ci] pre-commLow2/19/2026
v3.1.1## What's Changed * Add tests directory to source distribution by @yohaann196 in https://github.com/jazzband/dj-database-url/pull/285 * Switch linting and formatting from flake8+isort+black to ruff; add typos to pre-commit; fix typos by @akx in https://github.com/jazzband/dj-database-url/pull/281 * Add project URLs to pyproject.toml by @luzfcb in https://github.com/jazzband/dj-database-url/pull/287 * Update .pre-commit-config.yaml to use pinned version numbers. by @mattseymour in https://gitLow2/16/2026
v3.1.0## What's Changed * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/jazzband/dj-database-url/pull/268 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/jazzband/dj-database-url/pull/270 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/jazzband/dj-database-url/pull/276 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/jazzband/dj-database-url/pull/278 *Low1/4/2026
v3.0.1## What's Changed * Re-drop dependency on `typing_extensions` by @edmorley in https://github.com/jazzband/dj-database-url/pull/269 **Full Changelog**: https://github.com/jazzband/dj-database-url/compare/v3.0.0...v3.0.1Low7/2/2025
v3.0.0## What's Changed * Drop dependency on `typing_extensions` by @edmorley in https://github.com/jazzband/dj-database-url/pull/257 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/259 * Fix type errors by @adamchainz in https://github.com/jazzband/dj-database-url/pull/261 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/262 ## New Contributors * @edmorley made their firsLow6/2/2025
v2.3.0## What's Changed * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/249 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/251 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/254 * Make config test options not unknown types by @palfrey in https://github.com/jazzband/dj-database-url/pull/252 * Add Python 3.13 and Low10/23/2024
v2.2.0## What's Changed * Do not leak `key` loop variable into global namespace by @sobolevn in https://github.com/jazzband/dj-database-url/pull/226 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/223 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/227 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/228 * [pre-comLow5/28/2024
v2.1.0## What's Changed * fix: parse options with numerical values as int by @estahn in https://github.com/jazzband/dj-database-url/pull/225 ## New Contributors * @estahn made their first contribution in https://github.com/jazzband/dj-database-url/pull/225 **Full Changelog**: https://github.com/jazzband/dj-database-url/compare/v2.0.0...v2.1.0Low8/15/2023
v2.0.0## What's Changed * setup.py: Fix `project_urls` parameter name by @mgorny in https://github.com/jazzband/dj-database-url/pull/212 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/216 * Redo as a package to fix mypy issues by @palfrey in https://github.com/jazzband/dj-database-url/pull/215 ## New Contributors * @mgorny made their first contribution in https://github.com/jazzband/dj-database-url/pull/212 **Full Changelog**: htLow4/27/2023
v1.3.0## What's Changed * Better error on missing schema by @palfrey in https://github.com/jazzband/dj-database-url/pull/196 * Add types by @palfrey in https://github.com/jazzband/dj-database-url/pull/198 * 100% test coverage by @palfrey in https://github.com/jazzband/dj-database-url/pull/202 * Avoid duplicating the uses_netloc and schemes lines by @palfrey in https://github.com/jazzband/dj-database-url/pull/201 * isort 5.11.4 is broken by @palfrey in https://github.com/jazzband/dj-database-url/pLow3/27/2023
v1.2.0## What's Changed * allow TEST settings to be passed into a db config by @Brodan in https://github.com/jazzband/dj-database-url/pull/116 * Support urlencoding/decoding for hostname by @Dresdn in https://github.com/jazzband/dj-database-url/pull/181 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/194 * Fixes #195 - config missin conn_health_check parameter ## New Contributors * @Brodan made their first contribution in https://gLow12/13/2022
v1.1.0## What's Changed * Added support for Timescale and Timescale (GIS) by @lino in https://github.com/jazzband/dj-database-url/pull/174 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/175 * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/dj-database-url/pull/177 * Fix linter violation by @alexanderGerbik in https://github.com/jazzband/dj-database-url/pull/179 * [pre-commit.ci] pre-commit autoupLow12/12/2022
v1.0.0Initial release since the project was migrated to Jazzband. We are bumping to version 1.0.0 for a couple of reasons, though none of them are truely breaking API changes. * 1.0.0 dignifies a long awaited release of dj-database-url, the first since 2018. * We are dropping support of python2.7 πŸͺ¦ * Supported python versions >=3.7 Thank you for helping to push this project forwards.Low7/29/2022

Dependencies & License Audit

Loading dependencies...

Similar Packages

azure-storage-blobMicrosoft Azure Blob Storage Client Library for Pythonazure-template_0.1.0b6187637
azure-storage-file-shareMicrosoft Azure Azure File Share Storage Client Library for Pythonazure-template_0.1.0b6187637
mirakuruProcess executor (not only) for tests.3.0.2
opentelemetry-instrumentation-qdrantOpenTelemetry Qdrant instrumentation0.60.0
django-modelclusterDjango extension to allow working with 'clusters' of models as a single unit, independently of the database6.4.1