Как заставить sqlalchemy выдавать ошибку при попытке order_by в текстовом столбце?

#python #sqlalchemy #flask-sqlalchemy

#python #sqlalchemy #flask-sqlalchemy

Вопрос:

Мне нужно, чтобы SQLAlchemy выдавал ошибку, если мы пытаемся выполнить операцию order_by над текстовым столбцом. Это сделано, поскольку Oracle не поддерживает операцию order_by над текстом.

Я добился этого, выполнив:

 @compiles(Select)
def compile_sort_on_text_for_oracle_compat(select_stmt, compiler, **kw):
    for sort_col in select_stmt._order_by_clause.clauses:
        if isinstance(sort_col, Column) and isinstance(sort_col.type, Text):
            raise AssertionError(
                '"Sort By" should not be done on a Text column as it is not supported in Oracle. '
            )
    return compiler.visit_select(select_stmt, **kw)
 

Но, как вы можете видеть, я использую общий Select здесь.
Я хочу знать, есть ли лучший способ сделать это? (например, предложение compiling вместо Select)

Комментарии:

1. Разве SQLAlchemy уже не передает обратно исключение Oracle («(cx_Oracle. Ошибка базы данных) ORA-00932: несовместимые типы данных: …») при попытке выполнить запрос SELECT?

2. Ошибка будет выдана только в том случае, если используется oracle db, но я хочу, чтобы ошибка выдавалась для всех dbs.