繁体   English   中英

有条件地在 Python 中为 cx_Oracle 添加 WHERE 子句

[英]Conditionally add WHERE clause in Python for cx_Oracle

我有以下 Python 代码:

    params = {}
    query = 'SELECT * FROM LOGS '
    if(date_from and date_to):
        query += ' WHERE LOG_DATE BETWEEN TO_DATE(:date_start, "MM-DD-YYYY") AND LOG_DATE <= TO_DATE(:date_end, "MM-DD-YYYY")'
        params['date_start'] = date_from
        params['date_end'] = date_to
    if(structure):
        query += ' AND STRUCTURE=:structure_val'
        params['structure_val'] = structure
    if(status):
        query += ' AND STATUS =:status'
        params['status'] = status

    cursor.execute(query, params)

在这里,我有条件地将WHERE子句添加到查询中。 但是当我没有日期的价值时会出现一个问题,因为它不会采用WHERE并且会在没有WHERE情况下添加AND 如果我在查询中添加 where 子句,如果没有过滤器,那么它会给出错误的查询。 有没有更好的方法来做到这一点? 我一直在使用Laravel ,它的查询构建器有一个方法when ,这将有助于添加条件 where 子句。 在 Python 中为cx_Oracle这样的东西吗?

params = {}
query = 'SELECT * FROM LOGS '
query_conditions = []

if(date_from and date_to):
    query_conditions.apend(' WHERE LOG_DATE BETWEEN TO_DATE(:date_start, "MM-DD-YYYY") AND LOG_DATE <= TO_DATE(:date_end, "MM-DD-YYYY")')
    params['date_start'] = date_from
    params['date_end'] = date_to
if(structure):
    query_conditions.append('STRUCTURE=:structure_val')
    params['structure_val'] = structure
if(status):
     query_conditions.append('STATUS =:status')
    params['status'] = status
if query_conditions:
    query += " AND ".join(query_conditions)

cursor.execute(query, params)

将它们添加到list并使用AND连接值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM