将字典转换为字符串,并用逗号分隔每个键值对。

5
我正在尝试编写一个简单的函数,用于从Python字典中更新MySQL表格:
data = {'foo':1, 'bar':2}
table = 'mytable'
pk = 'mypk'
pk_value = 1

sql = ''
sql += 'UPDATE ' + table
sql += 'SET ' + convert_dict_to_str(data)
sql += 'WHERE ' + pk
sql += ' = ' + pk_value
sql += ';'


def convert_dict_to_str(data):
    result = ''
    for key in data:
        result += "{key} = {value}".format(key=key, value=data[key])   
    return result

print convert_dict_to_str(data)

但是我遇到了如何将字典转换成"key = value, key = value"的困境? 在我的例子中,期望输出应该是:
 'foo = 1, bar = 2'

代码有什么问题吗?我第一次快速浏览看起来没问题。 - User007
1
你应该使用参数化语句,而不是像这样构建语句,容易受到SQL注入攻击的影响。 - Pedro Romano
嗨@Pedro,你能告诉我更多关于这个的信息吗?我的意思是如何实现你所说的。 - Vor
2
您究竟使用的是哪个MySQL DB API 2.0驱动程序,以便我可以指向其文档中的正确位置?您可以在此处了解有关SQL注入的更多信息:http://en.wikipedia.org/wiki/Sql_injection - Pedro Romano
MySQLdb,我觉得我自己找到了答案,但是你可以推荐其他的方法吗?我的意思是,还有什么其他的方式可以将JSON上传到MySQL? - Vor
1
你可以查看一下这些使用参数的示例:http://mysql-python.sourceforge.net/MySQLdb.html#some-examples。对于你的情况来说,最后一个_multi-row insert_示例特别有趣。 - Pedro Romano
1个回答

17

像这样吗?

>>> ", ".join(["=".join([key, str(val)]) for key, val in data.items()])
'foo=1, bar=2'

我想排除值为空字符串的键值对,我们如何在这段代码中考虑它? - Tushar Goyal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接