列表字典中的Python MySQLdb update table

2024-03-28 21:45:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用MySQLdb包通过Python更新MySQL表。在

我想用以下格式的词典中的数据更新某个表:

muts={'YES': [rice,bread,pasta]
       'NO': [sweets,fat,milk,choco]} 

我需要对于mysql表中的行,其列food值与列表中的每个条目(上面的字典的值)相对应的行,另一个名为accept的列将用其相应的键“YES”或“NO”更新。在

到目前为止,当我想用一个列表更新表中的条目时,我经常这样做 以下内容:

^{pr2}$

但是现在我想同时用字典中的键值更新;我迷路了。在


Tags: 数据no列表字典格式mysql条目词典
1条回答
网友
1楼 · 发布于 2024-03-28 21:45:48

用两个%s定义sql,并在字典中循环to_add行,因此要放置k和{}:

>>> muts={'YES': ['rice','bread','pasta'],
...        'NO': ['sweets', 'fat', 'milk', 'choco']}
>>> muts
{'YES': ['rice', 'bread', 'pasta'], 'NO': ['sweets', 'fat', 'milk', 'choco']}
>>> sql = "UPDATE test2 g SET accept='%s' WHERE g.food IN (%s)"
>>> for k in muts:
...     to_add = ', '.join(muts[k])
...     ex_sql = sql % (k, to_add)
...     print ex_sql
...     # cursor.execute(ex_sql) here
... 
UPDATE test2 g SET accept='YES' WHERE g.food IN (rice, bread, pasta)
UPDATE test2 g SET accept='NO' WHERE g.food IN (sweets, fat, milk, choco)
>>> 

你可以把它放在一个函数中,然后传递给它“any\u list”。除非execute接受语句列表,否则不能在一行中使用.execute( , any_list)。在

顺便说一句,连接线实际上应该是:

^{pr2}$

这样你就可以在每种食物的周围加上'引号:

... # that gives...
UPDATE test2 g SET accept='YES' WHERE g.food IN ('rice', 'bread', 'pasta')
UPDATE test2 g SET accept='NO' WHERE g.food IN ('sweets', 'fat', 'milk', 'choco')

您可能还希望使用?占位符语法而不是%s来避免sql注入攻击。在

相关问题 更多 >