我的python脚本中有一个字典,其中包含数据为column_name:value,我想创建更新语句。我正在使用python 3.3和cx-oracle 我找到了这个答案:How to update mysql with python where fields and entries are from a dictionary?
并将其用作:
SQL = 'UPDATE scheme SET {}'.format(', '.join('{}=%s'.format(k) for k in schemes_dict))
cursor.execute(SQL, schemes_dict.values())
但错误的是:
TypeError: expecting a dictionary, sequence or keyword args
我一直在谷歌搜索和阅读,但我找不到让它工作的方法。有人可以帮忙吗?
答案 0 :(得分:0)
似乎你在呼唤:
Cursor.execute(statement[, parameters], **keywordParameters)
在另一个答案中,您可以按位置匹配
cursor.execute(SQL, *list(schemes_dict.values()))
或者也许,从错误消息中,一个简单的序列就可以了:
cursor.execute(SQL, list(schemes_dict.values()))
(我刚刚为python 3添加了list(...)
- 见下文)
但这取决于两次迭代的顺序是相同的(在这种情况下cpython可能是正确的,但不是你应该信任的东西)。在我看来,使用命名绑定(使用:name
而不是%s
)会更好:
SQL = 'UPDATE scheme SET {}'.format(', '.join('{}=:{}'.format(k, k) for k in schemes_dict))
cursor.execute(SQL, **schemes_dict)
其中**
就像来自dict的name1=value1, name2=value2, ...
。
或者
cursor.execute(SQL, schemes_dict) # using the new SQL above
(替代方案是因为错误消息似乎表明序列和dicts也可以工作)。
需要list(...)
,因为在python 3 dict.values()
中返回某种生成器(技术上,“可迭代视图”) - see here。