Django Framework

индекс
178,08

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

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

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

+1
wildMan #
отличная новость. спасибо.
0
homm #
Да просто отличнейшая новость. Вот только, вопрос, можно ли указать базу данных для всей модели, а не при выборке, так же логичнее.
+1
shestera #
Пока только для запросов.

P.S.
Но ведь это только первый коммит :)
поэтому ждём продолжения.
0
rSedoy #
Не только для запросов, вот из документации:
>>> user_obj.save(using='new_users')
>>> user_obj.delete(using='legacy_users')
+1
rSedoy #
упс, не разу въехал… для всей модели можно через Managers
0
voidus #
Это не первый коммит, это вливание целой огромной ветки, которая разрабатывалась Alex-ом Gaynor-ом и другими людьми около полугода.
0
spoof #
да поболее года будет
+1
kmike #
Была возможность указать через Meta, но убрали (по-моему так правильно). Т.к. для жестко для модели указывать базу как раз не логично — это не будет работать с идеологией reusable apps.
–9
barbuza #
reusable apps в жанге — миф
0
voidus #
Почему же?
–9
barbuza #
потому что их нет
0
Shark #
Ну теоретически написать такие не представляет труда. Практически же, я не вижу им применения как такового :)
+2
el777 #
На джанго все настолько просто и быстро пишется, что иногда проще написать с нуля :)
+2
troorl1985 #
Суровые сибирские мужики чуть не подавились чаем от удивления. Их уже столько написано, что всех и не запомнить, а их, оказывается, нет.
+1
daevaorn #
ты не прав
0
oleg_podsadny #
Согласен. auth приходится подпатчивать, есть написаные мной же аппы (например те же коменты) которых нельзя было сыскать раньше. Но назвать их реюзабельными не могу, так как при использовании в новых проектах что-то приходится переписывать/дописывать. Да и джанга меняется, что по хорошему надо все время апдейтить код, чтобы он был актуален.
0
joymax #
та не, джанго-регистрейшн или джанго-профайл вполне себе.
0
loststylus #
Ну, конечно можно. Менеджер просто переопределите — и все.
–4
mx2000 #
я, наверное чего-то не понимаю, но, имхо, каждый второй самопальный фреймворчатый велосипед умеет работать с несколькими БД одновременно. Где подвох?
0
igorekk #
Можно ссылочки посмотреть?
0
cadmi #
pylons и его модели, например
+1
igorekk #
Это как бы не «каждый второй самопальный фрейворчатый велосипед». А вполне себе «взрослый» проект.
–3
cadmi #
ну тогда куда ни плюнь, везде будет «взрослый», начиная с webpy.

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

«все кругом умеют к нескольким базам, одна django сама умная» (с)
0
poige #
> лично я с нее ушел.

На куда? :-)
–1
cadmi #
на много куда. в том числе на выше упомянуто :)
0
cadmi #
вот умеют же люди мысль сформулировать :)
0
cadmi #
и давай минусовать, ага.
+7
Shark #
Ну а теперь и Джанго может. Что вам не нравится? :)
+1
BooBSD #
А вы хоть пробовали сделать то, что написано в документации? мм?
Там как минимум 2 ошибки в 1 строке.
Бэкенд указывается вот так:
'ENGINE': 'django.db.backends.postgresql_psycopg2'
0
BooBSD #
Наконец-то исправили: code.djangoproject.com/changeset/11982
0
googlebot #
Было-бы хорошо еще иметь возможность указать что такая-то модель(или даже целый аппликейшн) должны работать через недефолтный бекенд (Естественно не в model.Meta а где-нить в специальном месте)
–1
poige #
Хех!… Как только отступы не навязываются синтаксически, питонисты точас же на них забивают:
# 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'» нужна запятая. :-)
+1
igorekk #
Официальная дока — с табами :)
+2
markeev #
Друзья, я не особо в претензии, но автор данного текста я, а посте об этом не сказано. Что делают в подобных ситуациях?
+2
Ferroman #
Посылают луч поноса.
+1
daevaorn #
Я бы не признался ;-)
+2
markeev #
Вся хохма в том, что я опубликовал пост у себя в блоге. Никого не просил о том, что мой текст использовали, и тем более, критиковали.

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

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

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

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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.