Python3 Pyodbc动态构建更新查询

时间:2018-07-10 12:54:32

标签: python python-3.x pyodbc

如何动态构建一个更新查询,其中要更新的数字和字段名称不同,而不必为每个更新语句设置不同的更新查询。

我是python的新手,但是在其他语言中,我看到它是通过键值对完成的,您可以动态地执行以下操作:

UPDATE my_table SET key1 = value1 WHERE key2 = value2

然后,您需要将一组键值对传递给该函数,然后再使用。

在python中执行此操作以创建更新字符串并传递字段的最佳方法是吗?像这样:

"UPDATE my_table SET {} = ? WHERE {} = ?".format(key1, key2)

然后我想您必须分别将参数传递给pyodbc.executemany?

但是我不确定您将如何处理可变数量的字段以进行更新。我敢肯定有一种方法可以轻松做到这一点,因此希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

是的,对于香草Python和pyodbc,您描述的基本过程是正确的。如果您有要更新的列名列表

>>> col_names_to_set = ['LastName', 'FirstName']

您可以为SET子句构建必需的项目,

>>> set_tokens = ','.join([f'{x}=?' for x in col_names_to_set])
>>> set_tokens
'LastName=?,FirstName=?'

在您的SQL命令文本中添加

>>> sql = f"UPDATE TableName SET {set_tokens} WHERE ..."
>>> sql
'UPDATE TableName SET LastName=?,FirstName=? WHERE ...'

,然后将该语句以及包含要更新的值的元组列表传递给executemany

请注意,为了安全起见,您可能应该将列名放在SQL方言的定界符中,例如SQL Server(T-SQL):

>>> set_tokens = ','.join([f'[{x}]=?' for x in col_names_to_set])
>>> set_tokens
'[LastName]=?,[FirstName]=?'