mirror of
https://github.com/django/django.git
synced 2025-06-03 18:49:12 +00:00
Refs #28107 -- Doc'd how to subclass an existing database engine.
This commit is contained in:
parent
406dba04e1
commit
10d5e439e9
@ -944,6 +944,54 @@ some limitations on the usage of such LOB columns in general:
|
|||||||
conjunction with ``distinct()`` to prevent ``TextField`` columns from being
|
conjunction with ``distinct()`` to prevent ``TextField`` columns from being
|
||||||
included in the ``SELECT DISTINCT`` list.
|
included in the ``SELECT DISTINCT`` list.
|
||||||
|
|
||||||
|
.. _subclassing-database-backends:
|
||||||
|
|
||||||
|
Subclassing the built-in database backends
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Django comes with built-in database backends. You may subclass an existing
|
||||||
|
database backends to modify its behavior, features, or configuration.
|
||||||
|
|
||||||
|
Consider, for example, that you need to change a single database feature.
|
||||||
|
First, you have to create a new directory with a ``base`` module in it. For
|
||||||
|
example::
|
||||||
|
|
||||||
|
mysite/
|
||||||
|
...
|
||||||
|
mydbengine/
|
||||||
|
__init__.py
|
||||||
|
base.py
|
||||||
|
|
||||||
|
The ``base.py`` module must contain a class named ``DatabaseWrapper`` that
|
||||||
|
subclasses an existing engine from the ``django.db.backends`` module. Here's an
|
||||||
|
example of subclassing the PostgreSQL engine to change a feature class
|
||||||
|
``allows_group_by_selected_pks_on_model``:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
:caption: mysite/mydbengine/base.py
|
||||||
|
|
||||||
|
from django.db.backends.postgresql import base, features
|
||||||
|
|
||||||
|
class DatabaseFeatures(features.DatabaseFeatures):
|
||||||
|
def allows_group_by_selected_pks_on_model(self, model):
|
||||||
|
return True
|
||||||
|
|
||||||
|
class DatabaseWrapper(base.DatabaseWrapper):
|
||||||
|
features_class = DatabaseFeatures
|
||||||
|
|
||||||
|
Finally, you must specify a :setting:`DATABASE-ENGINE` in your ``settings.py``
|
||||||
|
file::
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'mydbengine',
|
||||||
|
...
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
You can see the current list of database engines by looking in
|
||||||
|
:source:`django/db/backends`.
|
||||||
|
|
||||||
.. _third-party-notes:
|
.. _third-party-notes:
|
||||||
|
|
||||||
Using a 3rd-party database backend
|
Using a 3rd-party database backend
|
||||||
|
Loading…
x
Reference in New Issue
Block a user