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]' 如何解决?

1 回复

这个错误通常发生在用 queuepymysql 执行 SQL 时,把列表或数组直接拼进数值类型的字段里了。比如你代码里可能有个类似这样的操作:

# 错误示例:直接把列表当值用了
item_id = [2627290]
cursor.execute("UPDATE table SET num = %s WHERE id = 1", (item_id,))

[2627290] 是个 Python 列表,但数据库的 num 字段是 DOUBLEFLOAT 这类数值类型。MySQL 试图转换时发现是个列表,就报这个警告。

解决办法很简单:确保传给数值字段的是单个数值(intfloat),而不是列表。检查你的数据来源,如果是列表就取出元素:

# 正确做法:取出列表中的值
item_list = [2627290]
if item_list:
    item_value = item_list[0]  # 取第一个元素
    cursor.execute("UPDATE table SET num = %s WHERE id = 1", (item_value,))

如果列表可能为空,加个判断就行。

总结:检查传给数值字段的参数类型,确保是单个数字而不是列表。

回到顶部