@ArtemMik
Python

Как float данные из БД добавить в массив и найти самое близкое число к числу из БД?

У меня есть хэндлер, который берёт данные из БД и сравнивает эти данные с числом переданным со state и исчет самое близкое число из БД из данного числа. Моя проблема, в том, что я не понимаю, как записать float данные из БД в массив

Код:

@dp.message_handler(state=Cold_conductivity.add)
async def panel(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        how_many_compressors = data['how_many_compressors']
        spiral_and_piston = data['spiral_and_piston']
        manufacturer = data['manufacturer']
        condensed = data['condensed']
        hull = data['hull']
        cold = data['cold']
        cold_conductivity = data['cold_conductivity']
    await bot.send_message(message.chat.id, f"{how_many_compressors}\n{spiral_and_piston}\n{manufacturer}\n{hull}\n{condensed}\n{cold}\n{cold_conductivity}")
    if how_many_compressors == 1:
            pass
    if how_many_compressors == 2:
        db.cur.execute('SELECT сooling_capacity FROM twoKM_Medium_temperature_refrigeration_unit_model')
        data = db.cur.fetchall()
        b = min(наш массив, key=lambda x: abs(int(cold_conductivity) - x))
    await state.finish()
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
@ArtemMik Автор вопроса
Python
db.cur.execute(f"SELECT сooling_capacity FROM twoKM_Medium_temperature_refrigeration_unit_model_semi_hermetic ORDER BY ABS(сooling_capacity - {cold_conductivity}) ASC LIMIT 1")
                    data = db.cur.fetchall()


Сделал sql запрос f строкой
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Тебе не нужно вычитывать все данные из БД, чтобы потом искать их на питоне - задача прекрасно решается в рамках SQL запроса.
Если под "самым близким" числом ты понимаешь самое близкое по модулю, то задача звучит так: найти в таблице число, модуль разности которого с заданным числом минимален.
Например, если у нас таблица Numbers, в которой есть столбец num, содержащий искомые числа, то запрос будет иметь вид:
SELECT * FROM Numbers ORDER BY ABS(num - заданное_число) ASC LIMIT 1

Т.е. мы для все строк в Numbers рассчитываем разность между num и заданным числом, находим модуль, сортируем по возрастанию этого модуля (т.е. сортируем числа от близких к далёким), а потом берём первый (т.е. самый близкий) результат.

К своему коду адаптируешь самостоятельно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы