将多个用户输入从 python 传递到 SQL 查询
Pass multiple user inputs from python into SQL query
我正在做一个项目,要求我提示用户输入一些 ID,以便使用 SQL 开发人员从数据库中检索相关数据。
我知道如何只获取一份用户输入并将其放入一个 SQL 查询中,但很难处理多个用户输入。
比如我可以提示用户输入share_id让我搜索对应的交易是这样的:
connection = cx_Oracle.connect("hr", "oracle", "localhost/orcl")
cursor = connection.cursor()
share_id_val = input("Enter share id to search: ")
cursor.execute("SELECT * FROM trades WHERE share_id = :share_id", share_id = share_id_val)
但如果用户可能输入[share_id、broker_id、date_range]中的一个或多个,那么我只能认为构建 6 SQL 个查询,每个案例一个(这肯定是非常低效的)。
具体来说,我不知道如何在 cursor.execute
中构造 SQL 查询来说明不同的场景(用户可能只想通过 share_id 检索交易信息, 或者 broker_id 和 date_range).
PS:日期范围应包括 transaction_time 的 from_date 和 to_date。
我们将不胜感激。
您需要将用户提供的输入与带有转义子句(这里是 case 的 else 部分)的 case 语句一起使用,对应于无输入情况。这样您就可以独立处理多个输入。在这种情况下,没有输入映射到为空的输入变量(不是默认的非空值)。您应该能够扩展它以包括日期范围输入。
尝试
share_id_val = input("Enter share id to search: ")
broker_id_val = input("Enter broker id to search: ")
cursor.execute("
SELECT * FROM trades WHERE 1=1
and share_id = case when :share_id_bind_var is not null then :share_id_bind_var else share_id end
and broker_id = case when :broker_id_bind_var is not null then :broker_id_bind_var else broker_id end
",
share_id_bind_var = share_id_val,
broker_id_bind_var = broker_id_val
)
我正在做一个项目,要求我提示用户输入一些 ID,以便使用 SQL 开发人员从数据库中检索相关数据。
我知道如何只获取一份用户输入并将其放入一个 SQL 查询中,但很难处理多个用户输入。
比如我可以提示用户输入share_id让我搜索对应的交易是这样的:
connection = cx_Oracle.connect("hr", "oracle", "localhost/orcl")
cursor = connection.cursor()
share_id_val = input("Enter share id to search: ")
cursor.execute("SELECT * FROM trades WHERE share_id = :share_id", share_id = share_id_val)
但如果用户可能输入[share_id、broker_id、date_range]中的一个或多个,那么我只能认为构建 6 SQL 个查询,每个案例一个(这肯定是非常低效的)。
具体来说,我不知道如何在 cursor.execute
中构造 SQL 查询来说明不同的场景(用户可能只想通过 share_id 检索交易信息, 或者 broker_id 和 date_range).
PS:日期范围应包括 transaction_time 的 from_date 和 to_date。
我们将不胜感激。
您需要将用户提供的输入与带有转义子句(这里是 case 的 else 部分)的 case 语句一起使用,对应于无输入情况。这样您就可以独立处理多个输入。在这种情况下,没有输入映射到为空的输入变量(不是默认的非空值)。您应该能够扩展它以包括日期范围输入。
尝试
share_id_val = input("Enter share id to search: ")
broker_id_val = input("Enter broker id to search: ")
cursor.execute("
SELECT * FROM trades WHERE 1=1
and share_id = case when :share_id_bind_var is not null then :share_id_bind_var else share_id end
and broker_id = case when :broker_id_bind_var is not null then :broker_id_bind_var else broker_id end
",
share_id_bind_var = share_id_val,
broker_id_bind_var = broker_id_val
)