Python3 pyodbc 动态构建更新查询
Python3 pyodbc dynamically build update query
如何在我更新的数字和字段名称不同的情况下动态构建更新查询,而不必为每个更新语句设置不同的更新查询。
我是 python 的新手,但在其他语言中,我看到它是通过键值对完成的,您可以在其中动态地执行以下操作:
UPDATE my_table SET key1 = value1 WHERE key2 = value2
然后将键值对数组传递给该函数,然后就可以了。
在 python 中执行此操作的最佳方法是仅创建更新字符串并传入字段吗?类似于:
"UPDATE my_table SET {} = ? WHERE {} = ?".format(key1, key2)
那我猜你得单独传参给pyodbc.executemany?
但是我不确定您将如何处理可变数量的要更新的字段。我确信有一种方法可以轻松做到这一点,所以希望有人能给我提供线索。
是的,对于 vanilla 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]=?'
如何在我更新的数字和字段名称不同的情况下动态构建更新查询,而不必为每个更新语句设置不同的更新查询。
我是 python 的新手,但在其他语言中,我看到它是通过键值对完成的,您可以在其中动态地执行以下操作:
UPDATE my_table SET key1 = value1 WHERE key2 = value2
然后将键值对数组传递给该函数,然后就可以了。
在 python 中执行此操作的最佳方法是仅创建更新字符串并传入字段吗?类似于:
"UPDATE my_table SET {} = ? WHERE {} = ?".format(key1, key2)
那我猜你得单独传参给pyodbc.executemany?
但是我不确定您将如何处理可变数量的要更新的字段。我确信有一种方法可以轻松做到这一点,所以希望有人能给我提供线索。
是的,对于 vanilla 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]=?'