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 在参数样式上。
我真的很难更新 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 在参数样式上。