【问题标题】:How to use a list in Oracle query from Python如何在 Python 的 Oracle 查询中使用列表
【发布时间】:2021-08-14 19:40:36
【问题描述】:

我有以下疑问:

SOUTHERN_STATE = ["AL", "GA", "TN", ....]

query = """
    SELECT
        *
    FROM
        USERS
    WHERE
        STATE in ({})
""".format(SOUTHERN_STATE)

但我收到此错误:ORA00936: missing expression

如何在 Python 的 Oracle 查询中使用列表?

【问题讨论】:

标签: python python-3.x oracle cx-oracle


【解决方案1】:

只要SOUTHERN_STATE 变量中的值是众所周知的并且不会导致 SQL 注入,Joe Thor 提供的答案就可以正常工作。如果这些值不是众所周知的,则可以使用此解决方案:

SOUTHERN_STATE = ["AL", "GA", "TN", ....]
bind_names = ",".join(":" + str(i + 1) for i in range(len(SOUTHERN_STATE)))
sql = f"""
    SELECT *
    FROM USERS
    WHERE STATE in ({bind_names})"""
for row in cursor.execute(query, SOUTHERN_STATE):
    print(row)

您可以在cx_Oracle user documentation 中查看有关此方法的更多详细信息。

【讨论】:

    【解决方案2】:

    将python列表加入字符串并传递字符串。根据 cmets,使用本文中的逻辑:

    Python cx_Oracle module: unable to format query in code

    
    SOUTHERN_STATE = ["AL", "GA", "TN", ....]
    SOUTHERN_STATE_STRING ','.join(['%s'] * len(SOUTHERN_STATE))
    
    
    query = """
        SELECT
            *
        FROM
            USERS
        WHERE
            STATE in ({})
    """.format(SOUTHERN_STATE_STRING, tuple(SOUTHERN_STATE))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多