如何将变量从 CSV 文件传递到 Python 中的 Oracle SQL 查询获取?

问题描述 投票:0回答:1

我有以下代码段,我在其中读取 csv 文件并连接到数据库。然后我想将 CSV 文件中的两列作为变量传递给我的查询,并最终将结果转换为 pd 数据库。

我尝试了不同的绑定和转换列到列表的方法,但没有成功。通过这段代码我得到以下内容 错误:

DatabaseError: DPY-4010: a bind variable replacement value  
for placeholder ":HOUR" was not provided

或者当我将此部分添加到execute()时出现以下错误:

res = connection.cursor().execute("SELECT HOUR,UNITSCHEDULEID,VERSIONID,MINRUNTIME FROM 
 int_Stg.UnitScheduleOfferHourly WHERE  Hour in :1 AND UnitScheduleId in :2", hour, unitid)
TypeError: Cursor.execute() takes from 2 to 3 positional arguments but 4 were given

以下是我执行的代码:

import pandas as pd
import numpy as np

df = pd.read_csv(r"csv.csv") 

df=df.dropna()

unitid=df['UNITSCHEDULEID'].unique()
hour=df['GMT_DATETIME'].unique()

import os, oracledb, csv, pyodbc
TNS_Admin = os.environ.get('TNS_Admin', r'\\corp.xxx\oracle')
oracledb.defaults.config_dir = TNS_Admin
pw = input(f'Enter password: ')
connection = oracledb.connect(user='xxxxx', password= pw, dsn="World")

res = connection.cursor().execute("SELECT HOUR,UNITSCHEDULEID,VERSIONID,MINRUNTIME FROM 
 int_Stg.UnitScheduleOfferHourly WHERE  Hour in :Hour AND UnitScheduleId in :unitid").fetchall()
print(res)

connection.close()

python pandas oracle python-oracledb
1个回答
0
投票

为数组中的每个值生成一个带有绑定变量的语句,然后将这些值传递给绑定变量:

query = """SELECT HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME
FROM  int_Stg.UnitScheduleOfferHourly
WHERE Hour in ({hour_binds})
AND   UnitScheduleId in ({id_binds})""".format(
  hour_binds=",".join((f":{idx}" for idx, _ in enumerate(hours, 1))),
  id_binds=",".join((f":{idx}" for idx, _ in enumerate(unitid, len(hours) + 1))),
)

res = connection.cursor().execute(query, (*hours, *unitid)).fetchall()
print(res)
© www.soinside.com 2019 - 2024. All rights reserved.