войти зарегистрироваться

Django Framework whois

индекс
110,53

Django multiple database support — теперь поддерживает множественные соединения с базами данных

Весь твиттер буквально кипит от это новости – django теперь поддерживает множественные соединения с базами данных. Фича влита в транк и описана в документации.

В документации (по ссылке выше) описан процесс настройки и использования нескольких баз данных в джанго:


# in settings.py:

DATABASES = {
'default': {
'NAME': 'app_data',
'BACKEND': 'django.db.backends.postgres_psycopg2',
'USER': 'postgres_user',
'PASSWORD': 's3krit'
},
'users': {
'NAME': 'user_data'
'BACKEND': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'priv4te'
}
}


# in model lookups:

Author.objects.using('default').all()


# using('default') — явное указание БД для запроса. Если не указывать будет браться default

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

комментарии (53)

  • отличная новость. спасибо.
  • Да просто отличнейшая новость. Вот только, вопрос, можно ли указать базу данных для всей модели, а не при выборке, так же логичнее.
    • Пока только для запросов.

      P.S.
      Но ведь это только первый коммит :)
      поэтому ждём продолжения.
      • Не только для запросов, вот из документации:
        >>> user_obj.save(using='new_users')
        >>> user_obj.delete(using='legacy_users')
        • упс, не разу въехал… для всей модели можно через Managers
      • Это не первый коммит, это вливание целой огромной ветки, которая разрабатывалась Alex-ом Gaynor-ом и другими людьми около полугода.
        • да поболее года будет
    • Была возможность указать через Meta, но убрали (по-моему так правильно). Т.к. для жестко для модели указывать базу как раз не логично — это не будет работать с идеологией reusable apps.
      • раскрыть комментарий
        • Почему же?
          • раскрыть комментарий
            • Ну теоретически написать такие не представляет труда. Практически же, я не вижу им применения как такового :)
            • На джанго все настолько просто и быстро пишется, что иногда проще написать с нуля :)
            • Суровые сибирские мужики чуть не подавились чаем от удивления. Их уже столько написано, что всех и не запомнить, а их, оказывается, нет.
        • ты не прав
        • Согласен. auth приходится подпатчивать, есть написаные мной же аппы (например те же коменты) которых нельзя было сыскать раньше. Но назвать их реюзабельными не могу, так как при использовании в новых проектах что-то приходится переписывать/дописывать. Да и джанга меняется, что по хорошему надо все время апдейтить код, чтобы он был актуален.
        • та не, джанго-регистрейшн или джанго-профайл вполне себе.
    • Ну, конечно можно. Менеджер просто переопределите — и все.
  • я, наверное чего-то не понимаю, но, имхо, каждый второй самопальный фреймворчатый велосипед умеет работать с несколькими БД одновременно. Где подвох?
    • Можно ссылочки посмотреть?
      • pylons и его модели, например
        • Это как бы не «каждый второй самопальный фрейворчатый велосипед». А вполне себе «взрослый» проект.
          • ну тогда куда ни плюнь, везде будет «взрослый», начиная с webpy.

            но обсуждаемая возможность была одной из эээ «особенностей» Django, тех, что бесили. одна из тех, из-за которых лично я с нее ушел.

            «все кругом умеют к нескольким базам, одна django сама умная» (с)
    • Ну а теперь и Джанго может. Что вам не нравится? :)
  • А вы хоть пробовали сделать то, что написано в документации? мм?
    Там как минимум 2 ошибки в 1 строке.
    Бэкенд указывается вот так:
    'ENGINE': 'django.db.backends.postgresql_psycopg2'
  • Было-бы хорошо еще иметь возможность указать что такая-то модель(или даже целый аппликейшн) должны работать через недефолтный бекенд (Естественно не в model.Meta а где-нить в специальном месте)
  • Хех!… Как только отступы не навязываются синтаксически, питонисты точас же на них забивают:
    # in settings.py:

    DATABASES = {
    'default': {
    'NAME': 'app_data',
    'BACKEND': 'django.db.backends.postgres_psycopg2',
    'USER': 'postgres_user',
    'PASSWORD': 's3krit'
    },
    'users': {
    'NAME': 'user_data'
    'BACKEND': 'django.db.backends.mysql',
    'USER': 'mysql_user',
    'PASSWORD': 'priv4te'
    }
    }
    P. S. А после «'NAME': 'user_data'» нужна запятая. :-)
    • Официальная дока — с табами :)
  • Друзья, я не особо в претензии, но автор данного текста я, а посте об этом не сказано. Что делают в подобных ситуациях?
    • Посылают луч поноса.
    • Я бы не признался ;-)
      • Вся хохма в том, что я опубликовал пост у себя в блоге. Никого не просил о том, что мой текст использовали, и тем более, критиковали.

        Посылаю луч поноса, как и посоветовал Ferroman!

        Хотя изначально, такой задумки не было…
    • Пишут коммент. Автор советуется с совестью и либо апдейтит пост, либо ХОДИТ КАК ПАДЛА ОПЛЕВАНЫЙ ВСЮ СВОЮ НИЧТОЖНУЮ НИКЧЕМНУЮ ЖИЗНЬ!!11 Как-то так.

      Все правильно сделал (ц)
      • спасибо, учту.
    • так нету текста же
      • Да, в следующий раз, с прицелом на то, что пост «возьмут» на хабр буду писать его по всем канонам местного сообщества :).
        • тоесть нужно было у тебя спросить разрешения чтобы всех поздравить?
          • Дурень, это я всех и поздравил, а некто shestera нажал ctrl+C, ctrl+V. Причем, реально не добавил даже пропущенной запятой.
            • сам дура
              • Хамло. В жизни такой же смелый, или только по кнопкам ху**ить горазд?
                • в жизни я розовый пони, разве не понятно?
                  • ааахаха, молодец. Сразу весь негатив прошел.
            • Что в твоём тексте было такого уникального, что не было написано официальном сайте?

              это? «Поздравляю всех с этой новой фичей, мы давно ждали такой функциональности. Ура!»
              • Верно, в тексте не было ничего уникального, но он был написан мной, у меня в блоге. Вы, друг мой, скопировали его, но не указали ссылку. Ещё раз повторю, я не в претензии, а просто пытаюсь понять как на хабре обстоят дела с обратными ссылками на захабренные материалы.
                Собственно, все, что хотел узнал. Ваши комментарии излишне.
                Посылаю Вам луч поноса :)
  • Как-то давно был проект, в котором надо было использовать субдомены, на каждый из которых своя база, при одном инстансе джанги. Пришлось вплотную ознакомиться с кверисетом и вечно блуждающей глобальной переменной connection, топорным кешированием и коммитом транзакции. Пошел читать исходник джанги — надеюсь там хоть немного прибрались в свете этого радостного события!
    • А как было бы правильно кешировать?
      • Сорри, не в туда написал: Правильно — структурно, чтобы дать возможность для хуков. Раз уж есть бекенд, что подразумевает заменяемость функционала, то использование глобальных переменных или недоступного извне кеша, который влияет на заменяемость этого функционала — признак плохого дизайна.
  • Правильно — структурно, чтобы дать возможность для хуков. Раз уж есть бекенд, что подразумевает заменяемость функционала, то использование глобальных переменных или недоступного извне кеша, который влияет на заменяемость этого функционала — признак плохого дизайна.
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.