mysql_python+DBUtils 操作数据库常见错误

1、

错误:

Mon, 11 Apr 2016 07:11:00 [18257]db_mysql.py[line:60] [data_operate] [MainThread 140295489881920] ERROR sqlINSERT INTO ansible_playbook_result(uuid) VALUES(%s); error. Traceback (mostrecent call last):

 File "/usr/local/bin/ansible_engine/src/db/db_mysql.py", line55, in data_operate

   self.cursor.execute(sql, params)

 File "/usr/lib/python2.7/site-packages/DBUtils/SteadyDB.py",line 552, in tough_method

   result = method(*args, **kwargs) # try to execute

 File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py",line 187, in execute

   query = query % tuple([db.literal(item) for item in args])

TypeError: not all arguments convertedduring string formatting

源码:

sql = "INSERT INTO ansible_playbook_result(uuid,result) VALUES(%s);" % constant.CREATED_STATUS
params = (uuid)
#数据库操作函数

self.cursor.execute(sql, params)
#提交到数据库执行
self.conn.commit()
原因及解决方法:

params = (uuid) 改为 params = (uuid,)
这样 params才为元组,值为 (uuid,)。如果不加逗号,params的值为uuid的值。


2、

错误:

File "/usr/lib/python2.7/site-packages/DBUtils/SteadyDB.py", line 631, in tough_method
    raise error # reraise the original error again
OperationalError: (1054, "Unknown column 'mysql' in 'where clause'")

源码:

sql = """SELECT uuid,config_version FROM %s WHERE name=%s;""" % (constant.CONF_SOFTWARES_TAB,
                                                                 software_name)
原因及解决方法:

name后面的%s少了单引号。

改为 

sql = """SELECT uuid,config_version FROM %s WHERE name=%%s;""" % (constant.CONF_SOFTWARES_TAB,)
params = (software_name,)

3、

错误:

File"/usr/local/bin/ansible_engine/src/db/db_mysql.py", line 55, indata_operate

   self.cursor.execute(sql, params)

 File "/usr/lib/python2.7/site-packages/DBUtils/SteadyDB.py",line 631, in tough_method

   raise error # reraise the original error again

OperationalError: (1241, 'Operand shouldcontain 1 column(s)')

源码:

sql = """UPDATE %s SET `children_tasks`=%%s WHERE (`task_id`=%%s);""" % constant.TASK_GATHER_TAB
params = (uuid_list,task_uuid)
uuid_list是一个列表。
原因及解决方法:
写入数据库的数据必须为字符串
params = (json.dumps(uuid_list),task_uuid)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值