在 Python 中绑定 DB2 查询的参数时获取 SQLCODE=-104



假设数据.xlsx如下所示:

Column_Name |Table_Name

CUST_ID_1 |Table_1

CUST_ID_2 |Table_2

以下是我尝试使用 Python 中的 db2bind_param生成的 SQL:

TABLE_1中选择CUST_ID_1,其中CUST_ID_1= 12345

TABLE_2中选择CUST_ID_2,其中CUST_ID_2= 12345

这就是我尝试生成此查询的方式:

import ibm_db
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
validate_sql = "SELECT ? FROM ? WHERE ?=12345"
validate_stmt = ibm_db.prepare(conn, validate_sql)
df = pd.read_excel("data.xlsx", sheet_name='Sheet1')
for i in df.index:
ibm_db.bind_param(validate_stmt, 1, df['Column_Name'][i])
ibm_db.bind_param(validate_stmt, 2, df['Table_Name'][i])
ibm_db.bind_param(validate_stmt, 3, df['Column_Name'][i])
ibm_db.execute(validate_stmt)
validation_result = ibm_db.fetch_both(validate_stmt)
while validation_result != False:
print(validation_result[0])
validation_result = ibm_db.fetch_both(validate_stmt)

当我尝试执行此代码时,我遇到了 SQLCODE=-104 错误。

知道参数绑定的语法应该如何吗?

谢谢 加内什

2 个主要错误。
1. 不能对表或列名称使用参数标记(第 2 和第 3 个参数(。
2. 如果无法从查询(1-st 参数(中理解参数标记,则必须指定参数标记的数据类型。你必须使用类似 «cast(?作为所需的数据类型(»。但它仅供您参考,因为您尝试在此处将其用作列名,这是不可能的,如 1( 中所述。

最新更新