Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#19775 closed Bug (fixed)

database configuration without "default" not supported

Reported by: monkut Owned by: wsmith323
Component: Documentation Version: 1.4
Severity: Normal Keywords: multipledbs
Cc: warren@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by claudep)

For version 1.4 and dev documentation on multiple databases the text seems to imply that you can choose not to define a "default" db

https://docs.djangoproject.com/en/1.4/topics/db/multi-db/#defining-your-databases


... Django uses the database with the alias of default when no other database has been selected. If you don’t have a default database, you need to be careful to always specify the database that you want to use.

However, when you actually remove, or do not include a "default" and attempt to syncdb with Postgresql, you get the following error that explicitly tells you, that you *must* define a "default" database:

>python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 16, in <module>
    execute_manager(settings)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 459, in execute_manager
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 69, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py", line 8, in <module>
    from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
  File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 6, in <module>
    from django.db import models
  File "C:\Python27\lib\site-packages\django\db\__init__.py", line 12, in <module>
    raise ImproperlyConfigured("You must define a '%s' database" % DEFAULT_DB_ALIAS)
django.core.exceptions.ImproperlyConfigured: You must define a 'default' database

Attachments (1)

default_database_entry_required_clarification.diff (1.9 KB) - added by wsmith323 3 years ago.

Download all attachments as: .zip

Change History (10)

comment:1 Changed 3 years ago by claudep

  • Description modified (diff)
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted

I think that not depending on a specific database alias might be a desirable goal for the future. However, this will need some more cleanup regarding django.db.connection (see for example #13528).

Meanwhile, updating the documentation seems the right thing to do at short term.

comment:2 Changed 3 years ago by Casey Bessette <casey.bessette@…>

If I specify a default database as so, the application and tests run:

DATABASES = {
    'default': {  # Leave this blank, we do not want a 'default' database defined.
        'ENGINE': '',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },
    ...
}

But it would be better if nothing needed to be defined at all.

comment:3 Changed 3 years ago by wsmith323

  • Owner changed from nobody to wsmith323
  • Status changed from new to assigned

The language "don't have a default database" was a bit ambiguous. On the assumption that it was referring to the business problem and not the settings file (since Django won't work without a default entry), I said that plainly and also stated that Django requires a default database entry.

comment:4 Changed 3 years ago by wsmith323

  • Cc warren@… added
  • Has patch set

comment:5 Changed 3 years ago by Tim Graham <timograham@…>

  • Resolution set to fixed
  • Status changed from assigned to closed

In 31bcb102b24338e5cc0e69ade997e8fdc257b6b5:

Fixed #19775 - Clarified requirements of the "default" database.

Thanks monkut for the report and wsmith323 for the patch.

comment:6 Changed 3 years ago by Tim Graham <timograham@…>

In fceafa192901856edc0d44b593420e36100136b8:

[1.5.X] Fixed #19775 - Clarified requirements of the "default" database.

Thanks monkut for the report and wsmith323 for the patch.

Backport of 31bcb102b2 from master

comment:7 Changed 3 years ago by wsmith323

At Jacob's urging, I improved the documentation patch to include a settings.py example.

comment:8 Changed 3 years ago by Tim Graham <timograham@…>

In cf890c110e159de16d54a59dc878272776d38514:

Added an example of "default" database dictionary left blank; refs #19775.

Thanks wsmith323 for the patch.

comment:9 Changed 3 years ago by Tim Graham <timograham@…>

In 72db38facc2b713046ad25a1a5034fcbc328478c:

[1.5.X] Added an example of "default" database dictionary left blank; refs #19775.

Thanks wsmith323 for the patch.

Backport of cf890c110e from master

Note: See TracTickets for help on using tickets.
Back to Top