Найти - Пользователи
Полная версия: Рандомное получение записи из БД. SQLAlchemy
Начало » Базы данных » Рандомное получение записи из БД. SQLAlchemy
1 2 3
MetalHead
Добрый день, ребята! Задумана такая идея; получить одну запись по айди категории в рандом режиме.
Что-то на подобии(придумано):
session.query(Table_name).filter(Table_name.category_id == 1).random_one()
Заранее спасибо. Надеюсь, что подскажете.
4kpt_III
Очень хороший 2 ответ…
MetalHead
Спасибо. Разобрался, удобно однако. Для тех кому надо будет вдруг.
Если хотите выдрать много записей:
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)
4kpt_III
Ага. Мне тоже понравился. Но там есть специфика по БД. А это не очень хорошо Хотя я одну БД только использую.
MetalHead
4kpt_III
Ага. Мне тоже понравился. Но там есть специфика по БД. А это не очень хорошо Хотя я одну БД только использую.
Хм, мне интересно стало, поподробней, пожалуйста.
4kpt_III
По ссылке же написано, что для разных БД нужно использовать разные команды…
MetalHead
4kpt_III
По ссылке же написано, что для разных БД нужно использовать разные команды…
А вы про это. Тьфу ты, не так понял вас.
PooH
MetalHead
Разобрался, удобно однако. Для тех кому надо будет вдруг.
Только если в конторе есть DBA не показывайтесь ему на глаза :)

.order_by(func.random()) - это очень здорово, это создаст временную таблицу(и, скорее всего на диске, а не в памяти), добавит в нее колонку, заполнит колонку случайными значениями, отсортирует по этой колонке и выберет первую строчку - и ура! вот ваша запись!
4kpt_III
PooH
Фиговенько. Ваше решение?
FishHook
А если так? Выбираем одним запросом MAX и MIN Id, в этом диапазоне генерим рандомное число rnd_int, и селектим c LIMIT 1 по условию id >= rnd_int.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB