【问题标题】:Django Migrations; maintaining admin database concurrency with collaboratorsDjango 迁移;与协作者维护管理数据库并发
【发布时间】:2016-09-05 22:36:25
【问题描述】:

我的 Django 应用程序有两个数据库。一种是用于使用 django 的 admin、auth 等来跟踪用户信息。另一个是我的应用程序。当我为脚本应用程序进行迁移时,它很好,在迁移文件夹等中创建迁移,但是如果我为默认数据库进行迁移,那些存储在哪里?我打算对这些迁移进行版本控制,以便合作者可以随时与我同步。我做这一切都错了吗? Django 版本是 1.9

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get("PSQL_AUTH",''), # set in .bashrc
        'USER': os.environ.get("PSQL_USER",''), # set in .bashrc
        'PASSWORD': os.environ.get("PSQL_PW", ''),
        'HOST': '127.0.0.1',
        'PORT': '5432',
    },
    'scripts': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get("PSQL_SCRIPTS",''), # set in .bashrc 
        'USER': os.environ.get("PSQL_USER",''),
        'PASSWORD': os.environ.get("PSQL_PW", ''),
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

编辑:原来用于 auth、admin、contenttype、sessions 的 django 迁移存储在 Django 的安装位置。我尝试使用“MIGRATION_MODULES”设置将在这些应用程序上执行的迁移写入我的项目文件夹,但没有骰子。

【问题讨论】:

  • @e4c5 在同一个项目中使用不同的数据库设置其他 4 个应用程序。这是少数应用程序中的第一个。分离数据是有意义的。
  • @e4c5 这些应用程序独立运行。一个应用程序不需要引用另一个应用程序中的数据。可以肯定的是,我的用例无需跨数据库连接表就可以进行管理,但问题不是“我如何执行用户表与另一个数据库表的连接?”
  • @e4c5 正如我所说,这不是问题。

标签: python django


【解决方案1】:

您可以使用 django db 路由器

https://djangosteps.wordpress.com/2011/11/08/multiple-database-implementation-in-django/

class MyApp2Router(object):
    """
    A router to control all database operations on models in
    the myapp2 application
    """

    def db_for_read(self, model, **hints):
        """
        Point all operations on myapp2 models to 'my_db_2'
        """
        if model._meta.app_label == 'myapp2':
            return 'my_db_2'
        return None

    def db_for_write(self, model, **hints):
        """
        Point all operations on myapp models to 'other'
        """
        if model._meta.app_label == 'myapp2':
            return 'my_db_2'
        return None

    def allow_syncdb(self, db, model):
        """
        Make sure the 'myapp2' app only appears on the 'other' db
        """
        if db == 'my_db_2':
            return model._meta.app_label == 'myapp2'
        elif model._meta.app_label == 'myapp2':
            return False
        return None

【讨论】:

  • 这并没有回答有关 Django 身份验证后端迁移的问题。这并没有回答有关维护多个用户的单独数据库的并发性的问题。
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2018-03-04
  • 2015-06-27
  • 2015-11-20
相关资源
最近更新 更多