Я пытаюсь увидеть скомпилированную версию моего объекта выбора sqlalchemy. В какой-то момент мне нужно посмотреть, содержит ли столбец varchar[]
какую-либо строку из списка подстрок. (Другие части моего запроса, где я использую in_ и список строк, работают.) Почему эта печать:
... <BEGINNING OF QUERY> ... LIKE ANY(NULL)
вместо
... <BEGINNING OF QUERY> ... LIKE ANY('list%', 'of%', 'substrings%')
Примечание (другие части моего запроса, где я использую in_ и список строк, работают.)
from custom_database_classes import MyTable
from sqlalchemy import create_engine, select, cast, func, or_, and_, any_,
def read_data():
array_q = func.lower(func.array_to_string(MyTable.some_arr_col, ' ')).like(any_(['list%', 'of%', 'substrings%']))
query = select(['*']).where(or_(array_q))
print(query.compile(compile_kwargs={"literal_binds": True}))
Фактический результат
SELECT * FROM Schema.MyTable
WHERE lower(array_to_string(Schema.MyTable.some_arr_col, ' ')) LIKE ANY (NULL)
Ожидаемый результат
SELECT * FROM Schema.MyTable
WHERE lower(array_to_string(Schema.MyTable.some_arr_col, ' ')) LIKE ANY ('list%', 'of%', 'substrings%')