提问人:Stan 提问时间:10/19/2023 最后编辑:Stan 更新时间:10/19/2023 访问量:75
使用 Python 字典更新表 where 子句的键和值
Update a Table using a Python Dictionary keys and values for where Clause
问:
我希望更新 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)
但它不能作为我想要的单个更新语句。不知道我哪里出错了。任何帮助表示赞赏。
答:
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。这很酷,可以按预期工作!
评论