【问题标题】: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))