#23102 closed Cleanup/optimization (fixed)

Document change in manage.py sql* --database behavior in 1.7

Reported by: manuel.gysin@… Owned by: gmunumel
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)

SampleApp.tar.gz (2.6 KB) - added by manuel.gysin@… 12 months ago.
SampleDemo

Download all attachments as: .zip

Change History (10)

comment:1 Changed 12 months ago by claudep

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to needsinfo
  • Status changed from new to 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.

Changed 12 months ago by manuel.gysin@…

SampleDemo

comment:2 Changed 12 months ago by anonymous

  • Resolution needsinfo deleted
  • Status changed from closed to 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 Changed 12 months ago by areski

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 Changed 12 months ago by timo

  • Component changed from Core (Management commands) to Documentation
  • Summary changed from SQL-Management does not work with DATABASE_ROUTERS set to Document change in manage.py sql* --database behavior in 1.7
  • Triage Stage changed from Unreviewed to Accepted
  • Type changed from Bug to 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 Changed 12 months ago by gmunumel

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

comment:6 Changed 11 months ago by gmunumel

Last edited 11 months ago by gmunumel (previous) (diff)

comment:7 Changed 11 months ago by areski

  • Cc areski@… added

comment:8 Changed 11 months ago by timo

  • Has patch set
  • Triage Stage changed from Accepted to 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 Changed 11 months ago by Tim Graham <timograham@…>

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

In 2077bbe3fefb58eadfde0f2f36af13a0f1d3704a:

[1.7.x] Fixed #23102 -- Documented that sql* commands now respect allow_migrate().

Backport of 0af593dbe5 from master

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