Python 队列脚本执行时报错 Warning: Truncated incorrect DOUBLE value: '[2627290]' 如何解决?
当我使用如下脚本运行时:
#coding=utf-8
import MySQLdb
import numpy as np
conn = MySQLdb.connect(host='localhost',port = 3306,user='baidu',passwd='baidu',db='baidu')
cur = conn.cursor()
conn.autocommit(1)
query_sql = "select id from tmp.baiduVideo where created_at < date_sub(now(), interval 1 year);"
insert_sql = "insert ignore into tmp.baiduVideo_bak (select * from tmp.baiduVideo where id = %s);"
delete_sql = "delete from tmp.baiduVideo where id = %s;"
cur.execute(query_sql)
dataList = cur.fetchall()
aaa = np.array(dataList)
ids = []
for i in range(len(aaa)):
ids.append(aaa[i])
if (i+1)%100==0 :
cur.executemany(insert_sql,ids)
ids = []
cur.executemany(insert_sql,ids)
ids = []
for i in range(len(aaa)):
ids.append(aaa[i])
if (i+1)%100==0 :
cur.executemany(delete_sql,ids)
ids = []
cur.executemany(delete_sql,ids)
ids = []
cur.close
conn.close()
这个脚本的目的是把 tmp.baiduVideo 表的 1 年之前的数据归档到 tmp.baiduVideo_bak 表。 当我运行后出现如下错误提示: /usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:206: Warning: Truncated incorrect DOUBLE value: '[2627290]' r = r + self.execute(query, a)
/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:206: Warning: Truncated incorrect DOUBLE value: '[2627292]' r = r + self.execute(query, a)
/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py:206: Warning: Truncated incorrect DOUBLE value: '[2627295]' r = r + self.execute(query, a)
请问下这个应该如何来解决?
Python 队列脚本执行时报错 Warning: Truncated incorrect DOUBLE value: '[2627290]' 如何解决?
这个错误通常发生在用 queue 或 pymysql 执行 SQL 时,把列表或数组直接拼进数值类型的字段里了。比如你代码里可能有个类似这样的操作:
# 错误示例:直接把列表当值用了
item_id = [2627290]
cursor.execute("UPDATE table SET num = %s WHERE id = 1", (item_id,))
[2627290] 是个 Python 列表,但数据库的 num 字段是 DOUBLE 或 FLOAT 这类数值类型。MySQL 试图转换时发现是个列表,就报这个警告。
解决办法很简单:确保传给数值字段的是单个数值(int、float),而不是列表。检查你的数据来源,如果是列表就取出元素:
# 正确做法:取出列表中的值
item_list = [2627290]
if item_list:
item_value = item_list[0] # 取第一个元素
cursor.execute("UPDATE table SET num = %s WHERE id = 1", (item_value,))
如果列表可能为空,加个判断就行。
总结:检查传给数值字段的参数类型,确保是单个数字而不是列表。

