2013-08-02 3 views
0

У меня есть модель Requests, которую я хочу сохранить в другой базе данных, чем django databse по умолчанию.Как я могу использовать разные базы данных для разных моделей

Причина этого заключается в том, что эта таблица будет записывать каждый запрос для analytics, и это будет очень сильно заселено. Поскольку я беру резервные копии базы данных ежечасно, поэтому я не хочу увеличивать размер db только для этой таблицы.

Так что я думал о том, чтобы вставить отдельную БД, чтобы я не делал ее резервную копию чаще.

Это Docs говорит как этот 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

ответ

0

Модели просто классы - так что проверить, если у вас есть правильный класс. Этот пример должен работать для вас:

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).

Одно замечание: запросы не должны иметь внешних ключей, соединяющих их с моделями в других базах данных. Но вы, наверное, уже это знаете.

+0

Я попробовал 'syncb --database = analytics', и я попытался вывести результат, и я получаю это' raise Exception (model .__ name__) Исключение: Permission', поэтому я думаю, что модель - это что-то еще не моя Модель запроса – fdsgds

+0

Я попробовал что и он создал все таблицы в моей другой базе данных, кроме той, которая мне нужна – fdsgds

+0

@fdsgds: Вы проверили это: https://docs.djangoproject.com/en/dev/topics/db/multi-db/#allow_syncdb? – Tadeck

Смежные вопросы