Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2015 12:28:25

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

Добрый день, ребята! Задумана такая идея; получить одну запись по айди категории в рандом режиме.
Что-то на подобии(придумано):

session.query(Table_name).filter(Table_name.category_id == 1).random_one()
Заранее спасибо. Надеюсь, что подскажете.

Офлайн

#2 Апрель 7, 2015 13:27:36

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

Офлайн

#3 Апрель 7, 2015 14:14:32

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

Спасибо. Разобрался, удобно однако. Для тех кому надо будет вдруг.
Если хотите выдрать много записей:

random_rows = session.query(TableName).order_by(func.random()).filter(TableName.category_id == 1).all()
Если нужно выбрать одну запись:
random_row = session.query(TableName).order_by(func.random()).filter(TableName.category_id == 1).limit(1)

Отредактировано MetalHead (Апрель 7, 2015 14:16:28)

Офлайн

#4 Апрель 7, 2015 14:16:08

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

Ага. Мне тоже понравился. Но там есть специфика по БД. А это не очень хорошо Хотя я одну БД только использую.

Офлайн

#5 Апрель 7, 2015 14:17:38

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

4kpt_III
Ага. Мне тоже понравился. Но там есть специфика по БД. А это не очень хорошо Хотя я одну БД только использую.
Хм, мне интересно стало, поподробней, пожалуйста.

Офлайн

#6 Апрель 7, 2015 14:18:53

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

По ссылке же написано, что для разных БД нужно использовать разные команды…

Офлайн

#7 Апрель 7, 2015 14:21:55

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

4kpt_III
По ссылке же написано, что для разных БД нужно использовать разные команды…
А вы про это. Тьфу ты, не так понял вас.

Отредактировано MetalHead (Апрель 7, 2015 14:22:18)

Офлайн

#8 Апрель 7, 2015 14:38:30

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

MetalHead
Разобрался, удобно однако. Для тех кому надо будет вдруг.
Только если в конторе есть DBA не показывайтесь ему на глаза :)

.order_by(func.random()) - это очень здорово, это создаст временную таблицу(и, скорее всего на диске, а не в памяти), добавит в нее колонку, заполнит колонку случайными значениями, отсортирует по этой колонке и выберет первую строчку - и ура! вот ваша запись!



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Апрель 7, 2015 14:43:21

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

PooH
Фиговенько. Ваше решение?

Офлайн

#10 Апрель 7, 2015 15:09:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Рандомное получение записи из БД. SQLAlchemy

А если так? Выбираем одним запросом MAX и MIN Id, в этом диапазоне генерим рандомное число rnd_int, и селектим c LIMIT 1 по условию id >= rnd_int.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version