Also posted to stackoverflow: How do I manage a Non-default Django database 
<http://stackoverflow.com/questions/29526341/how-do-i-manage-a-non-default-django-database>
 
 
[image: image] 
<http://stackoverflow.com/questions/29526341/how-do-i-manage-a-non-default-django-database>
 
 
 
 
 
How do I manage a Non-default Django database 
<http://stackoverflow.com/questions/29526341/how-do-i-manage-a-non-default-django-database>
I am having trouble using my non-default database in my Django (v1.8) app. 
When I try makemigrations and migrate the PostgreSQL database does not get 
updated. ...
View on stackoverflow.com 
<http://stackoverflow.com/questions/29526341/how-do-i-manage-a-non-default-django-database>
Preview by Yahoo
 


I am having trouble using my non-default database in my Djaango (v1.8) app. 
When I
try makemigrations and migrate the PostgreSQL database does not get updated.

Here is my Django structure:

    fbrDjangoSite
    |-- db.sqlite3
    |-- manage.py
    |-- fbrDjangoSite
    |   |-- __init__.py
    |   |-- requirements.txt
    |   |-- settings.py
    |   |-- urls.py
    |   |-- wsgi.py
    |-- fbrPostHasteAppV0_1
    |   |-- __init__.py
    |   |-- admin.py
    |   |-- migrations
    |   |-- models.py
    |   |-- router.py
    |   |-- tests.py
    |   |-- urls.py
    |   |-- views.py


# fbrPostHasteAppV0_1/admin.py

    from django.contrib import admin
    from fbrPostHasteAppV0_1.models import MusicianTable   # gvim 
../fbrPostHasteAppV0_1/models.py +/MusicianTable
    from fbrPostHasteAppV0_1.models import AlbumTable      # gvim 
../fbrPostHasteAppV0_1/models.py +/AlbumTable

    # Register your models here.
    admin.site.register(MusicianTable)
    admin.site.register(AlbumTable)


# fbrPostHasteAppV0_1/models.py

    from django.db import models

    # Define your models/tables here.
    class MusicianTable(models.Model):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
        instrument = models.CharField(max_length=100)

        class Meta:
            managed = True

    class AlbumTable(models.Model):
        artist = models.ForeignKey(MusicianTable)
        name = models.CharField(max_length=100)
        release_date = models.DateField()
        num_stars = models.IntegerField()

        class Meta:
            managed = True

# fbrPostHasteAppV0_1/router.py

    class fbrPostHasteAppV0_1Router(object):
        def db_for_read(self, model, **hints):
            if model._meta.app_label == 'fbrPostHasteAppV0_1':
                return 'fbrPostHasteDbV0_1'
            return None

        def db_for_write(self, model, **hints):
            if model._meta.app_label == 'fbrPostHasteAppV0_1':
                return 'fbrPostHasteDbV0_1'
            return None

        def allow_syncdb(self, db, model):
            if db == 'fbrPostHasteDbV0_1':
                return model._meta.app_label == 'fbrPostHasteAppV0_1'
            elif model._meta.app_label == 'fbrPostHasteAppV0_1':
                return False
            return None


# fbrDjangoSite/settings.py

    # ...
    INSTALLED_APPS = (
        # ...
        'fbrPostHasteAppV0_1',             # v 
../fbrPostHasteAppV0_1/__init__.py
    )

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        },
        # ...
        'fbrPostHasteDb': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'fbrPostHasteDbV0_1',
            'USER': 'myuser',
            'PASSWORD': '',
            'HOST': 'myhost.us.overlord.com',
            'PORT': '0000',
        },
    }

    DATABASE_ROUTERS = 
['fbrPostHasteAppV0_1.router.fbrPostHasteAppV0_1Router',]


Here is the output when I run the migration commands:

    [fbrDjangoServerV0_1.venv.py] 
/<3>django/fbrDjangoServerV0_1.venv.py/fbrDjangoSite> python manage.py 
makemigrations fbrPostHasteAppV0_1 --verbosity 3
        
/fobar-tools/pylibs/lib/python/Django-1.8-py2.7.egg/django/db/models/base.py:1497:
 
RemovedInDjango19Warning: Router.allow_syncdb has been deprecated and will 
stop working in Django 1.9. Rename the method to allow_migrate.
          if not router.allow_migrate(db, cls):
        Did you rename the fbrPostHasteAppV0_1.Musician model to 
MusicianTable? [y/N] y
        Migrations for 'fbrPostHasteAppV0_1':
          0002_auto_20150408_1653.py:
            - Create model AlbumTable
            - Rename model Musician to MusicianTable
            - Remove field artist from album
            - Delete model Album
            - Add field artist to albumtable
    [fbrDjangoServerV0_1.venv.py] 
/<3>django/fbrDjangoServerV0_1.venv.py/fbrDjangoSite> python manage.py 
migrate --verbosity 3 
        
/fobar-tools/pylibs/lib/python/Django-1.8-py2.7.egg/django/db/models/base.py:1497:
 
RemovedInDjango19Warning: Router.allow_syncdb has been deprecated and will 
stop working in Django 1.9. Rename the method to allow_migrate.
          if not router.allow_migrate(db, cls):
        Operations to perform:
          Synchronize unmigrated apps: staticfiles, messages
          Apply all migrations: fbrSimDataV0_2, sessions, admin, polls, 
auth, contenttypes, fbrPostHasteAppV0_1
        Synchronizing apps without migrations:
        
/fobar-tools/pylibs/lib/python/Django-1.8-py2.7.egg/django/db/utils.py:336: 
RemovedInDjango19Warning: Router.allow_syncdb has been deprecated and will 
stop working in Django 1.9. Rename the method to allow_migrate.
          return [model for model in models if self.allow_migrate(db, 
model)]
          Creating tables...
          Installing custom SQL...
          Installing indexes...
        Running migrations:
          Applying 
fbrPostHasteAppV0_1.0002_auto_20150408_1653.../fobar-tools/pylibs/lib/python/Django-1.8-py2.7.egg/django/db/migrations/operations/base.py:107:
 
RemovedInDjango19Warning: Router.allow_syncdb has been deprecated and will 
stop working in Django 1.9. Rename the method to allow_migrate.
          router.allow_migrate(connection_alias, model) and
         OK
        
/fobar-tools/pylibs/lib/python/Django-1.8-py2.7.egg/django/contrib/auth/management/__init__.py:70:
 
RemovedInDjango19Warning: Router.allow_syncdb has been deprecated and will 
stop working in Django 1.9. Rename the method to allow_migrate.
          if not router.allow_migrate(using, Permission):
        The following content types are stale and need to be deleted:
            fbrPostHasteAppV0_1 | album
            fbrPostHasteAppV0_1 | musician

But when I look at the dtatbase the "table" has not been added.

    [fbrDjangoServerV0_1.venv.py] 
/<3>django/fbrDjangoServerV0_1.venv.py/fbrDjangoSite>       psql -h 
localhost -p 0000 --command "\l" postgres
                                     List of databases
           Name    |  Owner   | Encoding  | Collate | Ctype |   Access 
privileges
        
-----------+----------+-----------+---------+-------+-----------------------
         postgres  | myuser   | SQL_ASCII | C       | C     |
         template0 | myuser   | SQL_ASCII | C       | C     | =c/myuser     
     +
                   |          |           |         |       | 
myuser=CTc/myuser
         template1 | myuser   | SQL_ASCII | C       | C     | =c/myuser     
     +
                   |          |           |         |       | 
myuser=CTc/myuser
         test      | myuser   | SQL_ASCII | C       | C     |
        (4 rows)

I was under the impression that Django could create the table and keep it in
sync whenever I made changes to the model. Is my understanding correct and 
if
so what am I doing wrong here?


 
Stephen Meckley

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/98a00faa-2c40-40d6-a8be-bd3a73c980bb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to