Python:使用预准备语句在mysql中更新数据

时间:2018-04-16 14:22:49

标签: python mysql sql-update prepared-statement mysql-python

我目前仍然坚持使用我编写的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命令的提示可能会有所帮助。

非常感谢提前!

问候,托马斯

1 个答案:

答案 0 :(得分:0)

我想我可以自己回答。

我只是试图在没有准备的情况下运行相同的声明,它的工作就像一个魅力。 :)

所以,解决方案是:

>>> Fraction(2/3)
Fraction(6004799503160661, 9007199254740992)
>>> Fraction(2, 3)
Fraction(2, 3)