Python列表中的MySQLdb更新表

时间:2012-08-09 08:49:56

标签: python dictionary mysql-python

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

我希望使用具有以下格式的字典中的数据更新某个表:

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

对于mysql表上的行food值与列表中的每个条目(上面的字典的值)对应的行,我需要它,另一个名为accept的列将更新其对应的键; '是还是不是'。

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

food=[sweets,fat,milk,choco]
sql = "UPDATE test2 g SET accept='NO' WHERE g.food IN (%s)"
to_add = ', '.join(list(map(lambda x: '%s', any_list)))
sql = sql % to_add
cursor.execute(sql, any_list)

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

1 个答案:

答案 0 :(得分:2)

使用两个%s定义sql并在字典中循环以获取to_add行,因此您放置kto_add

>>> 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_list'。除非execute获取语句列表,否则不能在一行中使用.execute( , any_list)

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

to_add = "'%s'" % "', '".join(muts[k])

因此,您最终会在每种食物类型周围添加'引号:

... # 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注入攻击。