#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.