Executemany() SQL-使用列名变量更新语句

Executemany() SQL-Update Statement with variables for column names

我真的很难更新 python 中的许多行,使用 SAP HANA 作为我的数据库并使用 PyHDB 建立两个应用程序之间的接口。它在我 "harcode" 列时工作,但我需要通过在数组内部定义列来动态切换列。

我可以通过执行以下 sql-查询以硬编码方式更新必要的列:

sql = """UPDATE "ARE"."EMPLOYEES" SET "LIKELIHOOD_NO" = %s, "LIKELIHOOD_YES"= %s, "CLASS" = %s WHERE "EmployeeNumber" = %s;"""
cursor.executemany(sql, list)
connection.commit()

我要实现的是以下场景:

 dynamic_columns = ["LIKELIHOOD_NO", "LIKELIHOOD_Yes"]
 sql = """UPDATE "ARE"."EMPLOYEES" SET dynamic_column = %s, "LIKELIHOOD_YES" = %s, "CLASS" = %s WHERE "EmployeeNumber" = %s;"""
 cursor.executemany(sql, list)
 connection.commit()

我总是收到找不到相关列的错误,但我想不出解决这个问题的方法。

您可以使用普通字符串插值 (.format()) 添加动态列名称。在代码中可以看到here pyHDB支持"numeric" paramstyle:

for col in ['LIKELIHOOD_YES', 'LIKELIHOOD_NO']:
    sql = ('UPDATE "ARE"."EMPLOYEES" SET "{some_col}" = :1, "CLASS" = :2 '
           'WHERE "EmployeeNumber" = :3;').format(some_col=col)
    cursor.executemany(sql, list_of_tuples)

此代码将为 'LIKELIHOOD_YES''LIKELIHOOD_NO' 两列 运行。根据需要进行调整。它适用于像这样的元组列表:

list_of_tuples = [
    (value1, class_1, employee_no_1),
    (value2, class_2, employee_no_2),
    (value3, class_3, employee_no_3),
    (value4, class_4, employee_no_4),
]

您问题中的代码似乎使用了 'format' paramstyle,但这似乎不是 pyHDB 使用的。 See PEP 249 for more information 在参数样式上。