【问题标题】:Python3 pyodbc dynamically build update queryPython3 pyodbc 动态构建更新查询
【发布时间】:2018-07-10 12:54:32
【问题描述】:

如何动态构建更新查询,其中我正在更新的数字和字段名称不同,而无需为每个更新语句设置不同的更新查询。

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

UPDATE my_table SET key1 = value1 WHERE key2 = value2

然后你将一个键值对数组传递给函数,然后就可以了。

在 python 中执行此操作的最佳方法是创建一个更新字符串并传入字段吗?比如:

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

那我猜你必须单独将参数传递给 pyodbc.executemany?

但是我不确定您将如何处理要更新的可变数量的字段。我确信有一种方法可以轻松地做到这一点,所以希望有人能给我提供线索。

【问题讨论】:

    标签: python python-3.x pyodbc


    【解决方案1】:

    是的,使用 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]=?'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2012-12-21
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多