带有基于条件的可选AND的Python psycopg2 dynamic where子句

时间:2018-12-22 22:18:48

标签: python postgresql psycopg2

这可能不是一个新问题,但是在搜索和挖掘SO一段时间之后,我一直找不到合适的解决方案。我想根据是否设置了变量将条件AND添加到我的WHERE子句中。

我可以将三元数放入字符串格式,但这似乎不是一个好的解决方案。

def run_query(start_date, end_date, value):
    query = """
    SELECT * FROM table WHERE value = %(value)s {date_clause}""".format(date_clause = "AND start_date >= %(start_date)s AND end_date <= %(end_date)s" if start_date is not None and end_date is not Null else "")

cursor.execute(query, {"start_date": None, "end_date": None, "value": value})

1 个答案:

答案 0 :(得分:1)

您可以使用Postgres函数COALESCE()

query = """
SELECT * 
FROM my_table 
WHERE column = %(value)s 
AND otherColumn = COALESCE(%(otherValue)s, '')

"""

otherValue为None时,将转换为Postgres NULL,而COALESCE()返回一个空字符串。