Opened 10 years ago
Closed 10 years ago
#23102 closed Cleanup/optimization (fixed)
Document change in manage.py sql* --database behavior in 1.7
Reported by: | Owned by: | Gabriel Muñumel | |
---|---|---|---|
Component: | Documentation | Version: | 1.7-rc-1 |
Severity: | Normal | Keywords: | |
Cc: | areski@… | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hello,
If you set DATABASE_ROUTERS in settings.py, none of the sql-management commands are working:
[root@dgweb Demo]# python manage.py sqlall SampleModel [root@dgweb Demo]# [root@dgweb Demo]# python manage.py sql SampleMode [root@dgweb Demo]#
As soon DATABASE_ROUTERS is removed, things start working again:
[root@dgweb Demo]# python manage.py sqlall SampleModel BEGIN; CREATE TABLE "SampleModel_location" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(50) NOT NULL ) ; COMMIT;
Attachments (1)
Change History (10)
comment:1 by , 10 years ago
Resolution: | → needsinfo |
---|---|
Status: | new → closed |
comment:2 by , 10 years ago
Resolution: | needsinfo |
---|---|
Status: | closed → new |
Hello
No it have nothing to do with the setting itself.
There is a different behavior between Django 1.6 and 1.7.
This gives no output, because SampleModel in the second_db.
[mgysin@localhost Demo]$ python manage.py sqlall SampleModel [mgysin@localhost Demo]$
Adjusting the command with --database argument, get things working again:
[mgysin@localhost Demo]$ python manage.py sqlall SampleModel --database=second_db BEGIN; CREATE TABLE "SampleModel_location" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(50) NOT NULL ) ; COMMIT;
I'm not sure if this is a design decision or just some side effect with Django 1.7.
But it is very confusing if you are not aware of that. Maybe something like 'Only models in the default database are used, for other databases please provide --database argument' should be printed?
I've added an demo sample with this behavior.
comment:3 by , 10 years ago
It's definitely a change of behaviour in Django 1.7.
In 1.7 we read the models from router.get_migratable_models:
https://github.com/django/django/blob/master/django/core/management/sql.py#L45
in 1.6 we read the models from models.get_models:
https://github.com/django/django/blob/1.6.5/django/core/management/sql.py
I'm not sure what's the desired implementation for 1.7
comment:4 by , 10 years ago
Component: | Core (Management commands) → Documentation |
---|---|
Summary: | SQL-Management does not work with DATABASE_ROUTERS set → Document change in manage.py sql* --database behavior in 1.7 |
Triage Stage: | Unreviewed → Accepted |
Type: | Bug → Cleanup/optimization |
The new behavior makes sense to me. I think we should clarify the documentation and add a note about it in the 1.7 release notes.
comment:5 by , 10 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:7 by , 10 years ago
Cc: | added |
---|
comment:8 by , 10 years ago
Has patch: | set |
---|---|
Triage Stage: | Accepted → Ready for checkin |
Don't forget to check the "Has patch" flag so the ticket appears in the review queue. I'll review and commit this now. Thanks.
comment:9 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
I guess this might be related to the content of your
DATABASE_ROUTERS
setting. The best way to prove us the presence of a bug would be to provide a sample project where this can be reproduced.