【问题标题】:How can I use different databases for different models如何为不同的模型使用不同的数据库
【发布时间】:2013-08-02 02:49:59
【问题描述】:

我有一个名为 Requests 的模型,我想将它保存在与默认 django 数据库不同的数据库中。

这样做的原因是该表将记录对analytics 的每个请求,并且该表将被大量填充。由于我每小时进行一次数据库备份,所以我不想只为该表增加数据库大小。

所以我正在考虑放入单独的数据库,这样我就不会更频繁地备份它。

这个文档是这样说的 https://docs.djangoproject.com/en/dev/topics/db/multi-db/

def db_for_read(self, model, **hints):
    """
    Reads go to a randomly-chosen slave.
    """
    return random.choice(['slave1', 'slave2'])

def db_for_write(self, model, **hints):
    """
    Writes always go to master.
    """
    return 'master'

现在我不确定如何检查我的模型是否为Requests,然后选择database A,否则选择database B

【问题讨论】:

    标签: python database django


    【解决方案1】:

    模型只是类 - 所以检查一下,如果你有正确的类。这个例子应该适合你:

    from analytics.models import Requests
    
    
    def db_for_read(self, model, **hints):
        """
        Reads go to default database, unless it is about requests
        """
        if model is Requests:
            return 'database_A'
        else:
            return 'database_B'
    
    def db_for_write(self, model, **hints):
        """
        Writes go to default database, unless it is about requests
        """
        if model is Requests:
            return 'database_A'
        else:
            return 'database_B'
    

    不过,如果您愿意,您也可以使用其他一些技术之一(例如检查model.__name__ 或查看model._meta)。

    但请注意:请求不应使用外键将它们连接到其他数据库中的模型。但你可能已经知道了。

    【讨论】:

    • 我尝试了syncb --database=analytics,我尝试了输出结果,我得到了这个raise Exception(model.__name__) Exception: Permission,所以我认为模型不是我的请求模型
    • 我试过了,它在我的另一个数据库中创建了所有表,除了我想要的那个
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2023-03-25
    • 2022-01-15
    相关资源
    最近更新 更多