具有列名称变量的Executemany()SQL更新语句

时间:2018-07-25 13:46:15

标签: python sap hana

我真的很努力地使用SAP HANA作为数据库并使用PyHDB更新python中的许多行以在两个应用程序之间建立接口。当我“编码”列时,它可以工作,但是我需要通过例如在数组内部定义它们来动态切换列。

我能够通过执行以下sql-query以硬编码方式更新必要的列:

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()

我总是得到一个错误,即找不到相关的列,但是我找不到解决该问题的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用常规字符串插值(.format())添加动态列名称。您可以在代码here中看到pyHDB支持“数字”参数样式:

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上的paramstyles。