Как использовать метод `literal_processor` типов диалектов `sqlalchemy`?

Использование этого метода для классов типов непонятно. Я прочитал документацию алхимии, где сказано, что метод используется для рендеринга куска запроса напрямую из значений, но нет примеров использования и непонятная ситуация, когда это вызывается.

Например, если мы возьмём его реализацию в clickhouse_sqlalchemy.types.Array:

def literal_processor(self, dialect):
    item_processor = self.item_type_impl.literal_processor(dialect)

    def process(value):
        processed_value = []
        for x in value:
            if item_processor:
                x = item_processor(x)
            processed_value.append(x)
        return '[' + ', '.join(processed_value) + ']'
    return process

Здесь, видимо, стремятся отрендерить нативную для ClickHouse запись массива ([1, 2, 3], например). Но как это использовать при построении запроса? Я не нашёл иного способа использования типов кроме кастинга sa.cast(sa.func.array(1, 2, 3), Array(String)). Объекты типов невызываемы, поэтому откуда берутся значения, для которых мы применяем item_processor в этом примере, неясно.


Ответы (0 шт):