Python - Psycopg2, как смешивать кортежи и строки в cur.execute ()?

1

Я новичок в Python и psycopg2... I'am пытается сделать запрос, который использует IN SQL заявления и другие WHERE положения, но я получаю сообщение об ошибке, как это:

psycopg2.ProgrammingError: argument formats can't be mixed

Из того, что я понимаю, я смешиваю кортеж Python со строками, вот SELECT:

cur2.execute("SELECT hash FROM jobsads_text\
                     WHERE\
                     date_inserted::timestamp::date - now()::timestamp::date <= 0\
                     AND date_inserted::timestamp::date - now()::timestamp::date >= -7\
                     AND hash NOT IN %s \
                     AND lower((%s)) LIKE '%(%s)%'\
                     ORDER BY date_inserted asc;", ((not_in_sql,), search_field, search_string))

Я получаю ошибку в запросе выше.

Этот запрос ниже:

cur2.execute("SELECT hash FROM jobsads_text\
                     WHERE\
                     date_inserted::timestamp::date - now()::timestamp::date <= 0\
                     AND date_inserted::timestamp::date - now()::timestamp::date >= -7\
                     AND hash NOT IN %s \
                     ORDER BY date_inserted asc;", (not_in_sql,))

Мой вопрос... Как я могу not_in_sql кортеж not_in_sql со строками search_field и search_string?

Любые подсказки?

С наилучшими пожеланиями,

Теги:
psycopg2

1 ответ

2
Лучший ответ
t = (1, 3)
search_field = 'c'
search_string = '%something%'
print cursor.mogrify("""\
    select * 
    from p
    where 
        c in %%s
        and
        lower (%s) like %%s
    """ % search_field, (t, search_string))

Выведет это:

select * 
from p
where 
    c in (1, 3)
    and
    lower (c) like '%something%'

psycopg2 не будет заменять идентификаторы, такие как имена столбцов, поэтому вы должны подставить их перед передачей запроса в качестве первого аргумента метода.

  • 0
    Большой! Это работает! Большое спасибо за вашу помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню