如何为cx_oracle查询执行转换SQL过滤器

时间:2017-10-26 13:40:31

标签: python-3.x cx-oracle

我无法找到任何答案(也许我没有足够的搜索)如何使用过滤而不仅仅是直接的方式"WHERE column_x=:filter_value" 通过传递字典来实现 cursor.execute(query, {'column_x':filter_value}) 其中提供了精确的过滤值,但更灵活的过滤,如

    WHERE FACT_DATE BETWEEN TO_DATE('2015-12-21','YYYY-MM-DD')
    AND TO_DATE('2017-12-31','YYYY-MM-DD')
    AND TYPE_ID NOT IN (2,3)

有人知道如何在不将其放入查询字符串的情况下以最佳方式执行此操作吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以按照以下方式创建内容:

def query_with_filter(cursor, baseSql, **conditions): whereClause = " and ".join("%s = :%s" % (n, n) for n in conditions) sql = baseSql if not conditions else baseSql + " where %s" % whereClause cursor.execute(sql, conditions)

然后可以像这样使用:

这有一些限制:

1) the conditions have to be valid column names
2) you are limited to simple conditions

允许使用

中的特殊后缀可以克服第二个限制
fact_date__between__ = (date1, date2)
type_id__notin__ = (2, 3)

但是你需要将它们剥离并相应地调整where子句的计算。如果你想以这种方式进行,这应该足以让你开始。我曾经在以前的工作中做过类似的事情并且工作得相当好,我想!