首页 > 解决方案 > 如何将 Python 中数据框的列值传递给 Oracle SQL 脚本

问题描述

如何在 SQL 脚本的“where”子句中传递 Python 数据框列值?

我正在尝试在 Python 中运行 Oracle SQL 脚本。我有一个带有 [Week, RUN] 列的数据框 df1。我想使用包含 run_number = RUN[i] 的“where”子句运行 SQL 脚本。我在 Python 中有一个带有多个 cur.execute(sql_query) 语句的“for”循环。在“sql_query”之一中,我有 2 个“where”子句,我必须在其中过滤掉一个 run_number。但是,我收到“DDL 语句不支持绑定变量”错误。解决方案是什么?

for i in range(len(df1['RUN'])):
    cur.execute(sql_query_1, (int(df1['RUN'][i]), int(df1['RUN'][i])))
    cur.execute(sql_query_2)

sql_query_1 ='''Create table ....
where E.CID=A.CID AND :1 BETWEEN E.RUN_START AND E.RUN_END AND RUN = :2 
'''

我期望“for”循环运行所有 RUN 值,运行一堆查询,这些查询产生某些临时表集并附加到 Python 中的最终数据框对象。

标签: pythonpython-2.7oracle-sqldeveloper

解决方案


请尝试如下:

for i in range(len(df1['RUN'])):
    cur.execute(sql_query_1, m=int(df1['RUN'][i]), n=int(df1['RUN'][i]))
    cur.execute(sql_query_2)

sql_query_1 ='''Create table ....
where E.CID=A.CID AND E.RUN_START between :m and :n and E.RUN_END between :m and:n
'''

推荐阅读