使用 Python 字典更新表 where 子句的键和值

Update a Table using a Python Dictionary keys and values for where Clause

提问人:Stan 提问时间:10/19/2023 最后编辑:Stan 更新时间:10/19/2023 访问量:75

问:

我希望更新 SQL Server 表。它是一个大表(一次要更新多个项目),我在手动放置 where 语句来更新它时遇到了问题。因此,我创建了一个 Python 字典,以使用键值对作为键条件的值(如果存在)的设置值(如果存在)。 如果字典键为空或 null,则将键设置为值,否则将设置值。(只是为了添加两个值,预计它们应该在我想要更新的同一列中)。

所以具体问题如下:

假设我创建了一个字典,如下所示:

d = {'a': '', 'b':'x1', 'c': 'y1', 'd':'', 'e':'13f', 'f':'o'}

因此,假设我有一个像 SAMPLETABLE 这样的表,并且我想更新该表的列 SAMPLECOL,如下所示:

  UPDATE SAMPLE TABLE 
  SET SAMPLECOL = 'a'
  WHERE SAMPLECOL = 'a'

  SET SAMPLECOL = 'x1'
  WHERE SAMPLECOL = 'b'

  SET SAMPLECOL = 'y1'
  WHERE SAMPLECOL = 'c'

  SET SAMPLECOL = 'd'
  WHERE SAMPLECOL = 'd'

  SET SAMPLECOL = '13f'
  WHERE SAMPLECOL = 'e'

  SET SAMPLECOL = 'o'
  WHERE SAMPLECOL = 'f'

所以我在 Python 中尝试了这样:

 for key, values in d.items():
 
    if len(d[key]) > 1:
      sql = """UPDATE SAMPLETABLE 
      SET SAMPLECOL = '{}' where id 
       ='{}'""".format(d[key],key)
    else:
        d[key] = key
        sql = """UPDATE SAMPLETABLE 
       SET SAMPLECOL = '{}' where id = '{}'""".format(d[key], 
       key)

但它不能作为我想要的单个更新语句。不知道我哪里出错了。任何帮助表示赞赏。

python sql-server pandas 字典 sql-update

评论


答:

0赞 Linx 10/19/2023 #1

Python 进程:

def main():
    full_sql = """
    UPDATE SAMPLETABLE SET SAMPLECOL = 
    CASE 
    {}
    ELSE SAMPLECOL
    END;
    """
    d = {'a': '', 'b': 'x1', 'c': 'y1', 'd': '', 'e': '13f', 'f': 'o'}
    concat_list = []
    for key, values in d.items():
        if values:
            sql = f'WHEN SAMPLECOL = "{key}" THEN "{values}"'
        else:
            sql = f'WHEN SAMPLECOL = "{key}" THEN "{key}"'
        concat_list.append(sql)
    full_sql = full_sql.format(' '.join(concat_list))
    print(full_sql)

希望对你有帮助

评论

0赞 Dale K 10/19/2023
一个好的答案包括解释和工作代码。
0赞 Linx 10/19/2023
谢谢 Dale K,但有些人反对这个答案,没有给我任何评论。
0赞 Dale K 10/19/2023
这是一个完全不同的问题——人们不必解释为什么他们投反对票。
0赞 Stan 10/20/2023
非常感谢@Linx。这很酷,可以按预期工作!