使用Djang中的多个数据库执行迁移

2024-09-30 14:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据库在我的项目与多个应用程序。除一个应用程序外,所有应用程序都使用默认数据库,另一个应用程序有一个单独的数据库。在我运行makemigrations和/管理.pymigrate--database=separate_db_name默认数据库仍有未应用的迁移挂起。在

问题是,我如何才能使这个迁移只对我的独立应用程序可见,而不是其他应用程序(使用默认数据库)可见。谢谢

这是我的路由器

class S3DatabaseRouter(object):
"""
Determine how to route calls for s3web_upload_dev database
"""

def db_for_read(self, model, **hints):
    """
    Attempts to read s3web_upload models to go to s3web_upload_dev
    """
    if model._meta.app_label == 's3web_upload':
        return 's3web_upload_dev'
    return None

def db_for_write(self, model, **hints):
    """
    Attempts to write s3web_upload models to go to s3web_upload_dev
    """
    if model._meta.app_label == 's3web_upload':
        return 's3web_upload_dev'
    return None

def allow_migrate(self, db, app_label, model_name=None, **hints):
    """
    Make sure the s3web_upload app only appears in the 's3web_upload_dev' database
    """
    if app_label == 's3web_upload':
        return db == 's3web_upload_dev'
    return None

Tags: todevnone数据库app应用程序fordb
1条回答
网友
1楼 · 发布于 2024-09-30 14:26:16

对于使用default db的应用程序也需要在router类中路由,请尝试以下代码,它应该可以工作。在

class S3DatabaseRouter(object):
    """
Determine how to route calls for s3web_upload_dev database
"""
def db_for_read(self, model, **hints):
    """
    Attempts to read s3web_upload models to go to s3web_upload_dev
    """
    if model._meta.app_label == 's3web_upload':
        return 's3web_upload_dev'
    if app_label == 'default': # if you using custome applable use it instead of 'default'
        return 'default' # it should be the db name from settings file
    return None

def db_for_write(self, model, **hints):
    """
    Attempts to write s3web_upload models to go to s3web_upload_dev
    """
    if model._meta.app_label == 's3web_upload':
        return 's3web_upload_dev'
    if app_label == 'default':
        return 'default'
    return None

def allow_migrate(self, db, app_label, model_name=None, **hints):
    """
    Make sure the s3web_upload app only appears in the 's3web_upload_dev' database
    """
    if app_label == 's3web_upload':
        return db == 's3web_upload_dev'

    if app_label == 'default':
        return db == 'default'
    return None

相关问题 更多 >