Opened 11 years ago
Closed 11 years ago
#20704 closed Bug (worksforme)
DATABASE_ROUTERS : ImproperlyConfigured "cannot import name connection"
Reported by: | artscoop | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.5 |
Severity: | Normal | Keywords: | router |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
This bug occurs also on other versions of Django.
I have a Django project which usually works well.
Today I tried to introduce the use of another database. (one is PostgreSQL, the new one is SQLite)
I've setup my settings.py as follows :
DATABASE_ROUTERS = ['engine.db.routers.custom.Router',]
The path to the router is fine, because changing it to a non-existing one raises a correct error. The router inherits from object, and defines the 4 functions shown in the Django documentation. The
allow_relation
and allow_syncdb
members return True (tried with None), db_for_write
and db_for_read
return a database name or None.
I have properly defined my DATABASE
setting.
However, trying to syncdb throws
File "/home/artscoop/virtualenv/project/lib/python2.7/site-packages/django/db/__init__.py", line 16, in <module> router = ConnectionRouter(settings.DATABASE_ROUTERS) File "/home/artscoop/virtualenv/project/lib/python2.7/site-packages/django/db/utils.py", line 117, in __init__ raise ImproperlyConfigured('Error importing database router %s: "%s"' % (klass_name, e)) django.core.exceptions.ImproperlyConfigured: Error importing database router Router: "cannot import name connection"
No answer in any site could resolve this problem.
The dubious advice to add from django.db import connections
leads to another exception
File "/home/steve/virtualenv/project/lib/python2.7/site-packages/django/db/backends/dummy/base.py", line 15, in complain raise ImproperlyConfigured("settings.DATABASES is improperly configured. " ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
Change History (7)
comment:4 by , 11 years ago
This might have been fixed by commit [6a6bb168be90594a18]. To check this, it would be nice if you could test with the current 1.6beta.
comment:5 by , 11 years ago
The routers.py module does not import anything.
Only has
# coding: utf-8 from __future__ import absolute_import
comment:6 by , 11 years ago
The behaviour of routers seems correct in @1.6b1 and @stable/1.6.x though.
comment:7 by , 11 years ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
Thanks for testing on latest code, and I'm happy this is fixed there.
I think you should be able to temporarily workaround the problem by moving your custom Router class in a different path. The current circular import issue may be caused by any __init__.py
along the path (i.e. engine/__init__.py
, engine/db/__init__.py
, etc.).
I really doubt that the fix will be backported in 1.5, therefore closing the ticket.
I have found that moving the router to an app which has no models.py (or is not in
INSTALLED_APPS
) fixes everything. But the problem with importing from another location is still a bug which is at least not documented.