python:使用prepared语句更新mysql中的数据

iqjalb3h  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(358)

我现在被我写的python脚本困住了。我试着尽可能地编写它,以便将它用于其他项目和集成。因此,我正在构建一个按需更新语句,其结果如下:

import mysql.connector as mariadb

conn = mariadb.connect(host='localhost', user='***', password='***', database='***', port=3306)

cursor=conn.cursor(prepared=True)

sqlcmd = "UPDATE aix_resourcegroups SET aix_rg_current_host=%(current_node)s, aix_rg_dns=%(dns)s, aix_rg_cluster=%(cluster_name)s, aix_rg_ip=%(ip)s, aix_rg_label=%(label)s WHERE aix_rg_name=%(resourcegroup)s"

data={'cluster_name': 'mycluster', 'resourcegroup': 'ZUPSOAP', 'label': 'myrg', 'current_node': 'nodename', 'ip': '1.2.3.4', 'dns': 'myhost.anywhere.net'}

cursor.execute(sqlcmd, data)

错误是:

ERROR: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%(current_node)s, aix_rg_dns=%(dns)s, aix_rg_cluster=%(cluster_name)s, aix_rg_ip' at line 1

我以为用 $(key)s 可能会使用字典索引并用给定字典中元组键的值替换元组的值。
它在使用前是有效的 ? (问号)代替 %(name)s ,但由于我必须控制要更新的值的顺序(我的表中曾经有过垃圾),所以我认为切换到命名值(或者以任何方式调用)可能是个好主意。
不过,有什么提示可以帮我完成吗?另外,关于如何通过游标获得完整执行的sql命令的提示可能会有所帮助。
非常感谢!
你好,托马斯

nafvub8i

nafvub8i1#

我想我可以自己回答这个问题。
我只是试着在没有准备的情况下运行相同的语句,它就像一个魔咒
因此,解决方案是:

import mysql.connector as mariadb

conn = mariadb.connect(host='localhost', user='***', password='***', database='***', port=3306)

cursor=conn.cursor()

sqlcmd = "UPDATE aix_resourcegroups SET aix_rg_current_host=%(current_node)s, aix_rg_dns=%(dns)s, aix_rg_cluster=%(cluster_name)s, aix_rg_ip=%(ip)s, aix_rg_label=%(label)s WHERE aix_rg_name=%(resourcegroup)s"

data={'cluster_name': 'mycluster', 'resourcegroup': 'ZUPSOAP', 'label': 'myrg', 'current_node': 'nodename', 'ip': '1.2.3.4', 'dns': 'myhost.anywhere.net'}

cursor.execute(sqlcmd, data)

conn.commit()
conn.close()

相关问题