У меня есть таблица со столбцом String, но она содержит только целые числа (в виде строк).SQLAlchemy order_by строковый столбец со значениями int
Проблема возникает, когда я хочу заказать этот столбец по определенному запросу. SQLAlchemy (или питон более конкретно) использует лексикографический порядок строк, так
>>> '100000' < '99999'
True
даже когда
>>> 100000 < 99999
False
Как я могу добиться, чтобы order_by численного значения этой строки столбца?
настоящее время у меня такой запрос, как это:
session.query(TableName).filter(TableName.column == 'some_value').order_by(TableName.string_column_holding_integers).all()
Пожалуйста, обратите внимание, что изменение типа столбца в целое не вариант, мне нужно правильно order_by (числовым значением) по настоящее время условия.
Также было обнаружено, что непосредственно на БД с использованием SQL (это БД MySQL) я не могу упорядочить этот столбец правильно, поэтому я обнаружил, что здесь используется CAST (string_column_holding_integers AS без знака). Но не нашли способ сделать это (часть CAST) непосредственно по запросам SQLAlchemy.
что, если столбец содержит оба числа & строк? как я могу сохранить правильный порядок? –
@ Ricky Это невозможно. Все значения в столбце должны быть одного типа. – univerio
В PostgressSQL вы можете: ORDER BY NULLIF (regexp_replace (my_column_1, E '\\ D', '', 'g'), '') :: int (если значение не INT - оно игнорируется и продолжается) таким образом, мы можем корректно упорядочить числовые значения и продолжить с помощью строк, как обычно, que is - как в SQLAlchemy мы делаем это –