Как использовать кортеж внутри словаря для именованных параметров в psycopg2 - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь передать кортеж значений для использования в операторе WHERE IN, и вот что мне возвращает cursor.mogrify ():

b'SELECT site_id,site_name,date,time,* FROM "SiteInfoSchema"."Compressor" 
WHERE site_id in (\'TSE-000027, TSE-000032, TSE-000030, TSE-000031, TSE- 
000034, TSE-000033, TSE-000019, TSE-000020, TSE-000055, TSE-000021, TSE- 
000036, TSE-000035, TSE-000070, TSE-000003, TSE-000047, TSE-000029, TSE- 
000023, TSE-000038, TSE-000045, TSE-000046, TSE-000024, TSE-000022, TSE- 
000025, TSE-000028, TSE-000026, TSE-000017, TSE-000069, TSE-000054, TSE- 
000037, TSE-000018\') AND device_id = \'1\' AND date >= \'2018-05-02\' and 
date <= \'2018-05-02\' ;'

И, как вы можете видеть, TSE - ****** все рассматриваются как один аргумент. Я передаю словарь в execute (), но кортеж для именованного аргумента, содержащего значения TSE - ******, вызывает ошибку, и попытка использовать строку с уже расположенным рядом символом "'" не работает из-за это также ускользает от них. Я попробовал все виды вещей без удачи. Любое понимание приветствуется!

1 Ответ

0 голосов
/ 02 мая 2018

Передайте tuple, чтобы расширить список IN:

sql = 'SELECT * FROM Compressor WHERE site_id IN %(sites)s'
cur.execute(sql, { 'sites': tuple(sites.keys()), })
...