Python 在sql.ExecuteMy(…语法错误,靠近';(';

Python 在sql.ExecuteMy(…语法错误,靠近';(';,python,mysql,pymssql,executemany,Python,Mysql,Pymssql,Executemany,我试图在python中执行以下代码,但它会导致“(”executemany(…)的语法错误。当我从sql中删除te名称并只写%s时,它也会导致占位符多于变量的错误 有人知道我怎么修吗 upInfo ={"aa": "aaa","bb": "bbb","cc": "ccc"} sql = 'UPDATE table SET a= %(aa)s WHERE b= %(bb)s and c= %(cc)s' con = pymssql.connect(...) con.autocommit(True

我试图在python中执行以下代码,但它会导致“(”executemany(…)的
语法错误。当我从
sql
中删除te名称并只写
%s
时,它也会导致
占位符多于变量的错误
有人知道我怎么修吗

upInfo ={"aa": "aaa","bb": "bbb","cc": "ccc"}
sql = 'UPDATE table SET a=  %(aa)s WHERE b= %(bb)s and c= %(cc)s'
con = pymssql.connect(...)
con.autocommit(True)
cur = con.cursor()
cur.executemany(sql, upInfo)

因为这是
executemany()
,所以它应该是一个字典列表:

upInfo = [{"aa": "aaa", "bb": "bbb", "cc": "ccc"}]
或者,使用常规的
execute()


谢谢你的回答,它是有效的,但我每次都要将一个对象传递给我的python文件。因为它只是一个字典,所以我不想将它作为一个列表来处理。除了executemany之外,你知道其他安全的方法吗?@user4103576好的,但是为什么不使用常规的
execute()
在这里?谢谢。既然是这样,我宁愿使用占位符
execute(stmt,{“aa”:“aaa”,“bb”:“bbb”,“cc”:“ccc”})
executemany(stmt,[{“aa”:“aaa”,“bb”:“bbb”,“cc”:“ccc”})一样安全。)
。两者都用。还是我错了?对不起,我错了!我不知道
execute
有像
executemany
这样的占位符选项。谢谢你的回答
cur.execute(sql, upInfo)