我想通过psyopg2执行这个sql:

select indexname from pg_indexes where (tablename, indexname) in (
      ('tab1', 'index1'),
      ('tab2', 'index2')
);

代码如下:
cursor.execute(
'select tablename, indexname from pg_indexes where (tablename, indexname) IN %s;', [
    [('tab1', 'col1'), ('tab2', 'col2')],
               ])

我有个例外:
ProgrammingError: syntax error at or near "ARRAY"
LINE 1: ...e from pg_indexes where (tablename, indexname) IN ARRAY[('ta...

如何将元组列表传递给PostgreSQL vis psyopg2?

最佳答案

如果传递一个元组而不是一个列表,则它可以工作:

cursor.execute(
'select tablename, indexname from pg_indexes where (tablename, indexname) IN %s;', [
    tuple([('tab1', 'col1'), ('tab2', 'col2')]),
               ])

如果你通过了一个名单,别问我为什么会失败。

07-26 02:46