在 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
连接
我有以下 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