Когда я выполняю приведенный ниже запрос в редакторе запросов, таком как DBeaver - он возвращает результат, но если я выполняю тот же запрос через Python & psycopg2, он не возвращает результат. '%%' должно соответствовать любому заголовку / местоположению, поэтому всегда будет что-то возвращаться. Я просто проверяю это для категории без ключевых слов, но также будет принимать массив ключевых слов, если они существуют в зависимости от категории. Таким образом, массив может быть ['%%'] или ['% boston%', '% cambridge%'] и оба должны работать.
select title, link
from internal.jobs
where (title ilike any(array['%%'])
or location ilike any(array['%%']))
order by "publishDate" desc
limit 1;
Я попытался добавить флаг E в начале строки. Например, E '%%'
Python:
import psycopg2
FILTERS = {
'AllJobs': [],
'BostonJobs': ['boston', 'cambridge'],
'MachineLearningJobs': ['ml', 'machine learning']
}
conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
sql = """
select title, link
from internal.jobs
where (title ilike any(array[%s])
or location ilike any(array[%s]))
order by "publishDate" desc
limit 1;
"""
for title, tags in FILTERS.items():
if not tags:
formatted_filters = "'%%'" # Will match any record
else:
formatted_filters = ','.join([f"'%{keyword}%'" for keyword in tags])
cur.execute(sql, (formatted_filters))
results = cur.fetchone()
print(results)