如何在Python中优雅追加字典值以构建安全SQL语句?
优雅追加字典值构建安全SQL更新语句
你可以用以下两种简洁写法,既保持参数化查询的安全性(避免SQL注入),又不用先赋值再追加:
方法1:列表拼接
直接把字典值转成列表后和目标值的列表拼接,生成新列表传入execute:
sql = 'UPDATE table SET {} WHERE id = %s'.format(', '.join('{} = %s'.format(k) for k in column)) cursor.execute(sql, list(column.values()) + [url])
列表加法会返回包含所有字典值和url的新列表,完全满足参数要求。
方法2:解包语法(Python 3.5+)
利用Python的可迭代对象解包特性,语法更简洁:
sql = 'UPDATE table SET {} WHERE id = %s'.format(', '.join('{} = %s'.format(k) for k in column)) cursor.execute(sql, [*column.values(), url])
*column.values()会把字典的所有值解包到列表中,再直接追加url,写法清爽且可读性强。
这两种写法都延续了参数化查询的安全机制,所有动态值都通过execute的参数传递,不会直接嵌入SQL语句,彻底避免SQL注入风险。
内容的提问来源于stack exchange,提问作者GFL
相关产品推荐
相关产品推荐

