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)