将列名列表传递给psycopg2中的查询

时间:2016-09-28 13:57:00

标签: python postgresql amazon-redshift psycopg2

我有以下查询:

select distinct * from my_table where %s is NULL;

我希望能够将多个列名称传递给此查询,但我不知道每次要检查空值的列数。

如何使用上述查询参数技术从同一语句中进行以下查询?:

select distinct * from my_table where "col1" is NULL or "col2" is NULL;
select distinct * from my_table where "col1" is NULL or "col2" is NULL or "col3" is NULL;

我希望得到一个答案,包括能够得到以下内容,但在这种情况下没有必要:

select distinct * from my_table where "col1" is NULL;

(我正在使用Amazon Redshift,以防删除与postgresql相关的可能性)

1 个答案:

答案 0 :(得分:1)

query = '''
    select distinct *
    from my_table
    where
        %s or
        "col1" is NULL and %s or
        "col2" is NULL and %s or
        "col3" is NULL and %s
'''

True传递给您要评估的条件。假设您想要col1col2null的任何行:

cursor.execute(query, (False, True, True, False))

如果您想要所有行:

cursor.execute(query, (True, False, False, False))

BTW双引号标识符是一个坏主意。