我真的很努力地使用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()
我总是得到一个错误,即找不到相关的列,但是我找不到解决该问题的方法。
答案 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。