这是我收到的错误: 错误:1292 (22007):截断了不正确的 DOUBLE 值:'acd'
我的代码:
cur = connection.cursor()
def bulk_insert(table_name,column_name, values):
try:
query = f"UPDATE {table_name} SET {column_name} = %s WHERE ID = %s"
cur.executemany(query, [(value, key) for value, key in values.items()])
connection.commit()
print("Bulk insert completed successfully.")
except Exception as e:
print(f"Error: {e}")
values 是一个字典,其中键为 ID。
它可以处理数字,但是当我尝试插入字符串时,它给了我这个错误,数字和 str 的列与 INT 和 VARCHAR 不同。
elif typ == 2:
n_char = int(input("Maximum character limit for this column: "))
cur.execute("ALTER TABLE {} ADD {} VARCHAR({})".format(tbl_name,name,n_char))
cur.execute("SELECT ID FROM {}".format(tbl_name))
cur.fetchall()
num_of_rows = cur.rowcount
print(f"There are now {num_of_rows} empty rows in the column {name}.")
fill = input(f"Type:\n1: To fill column '{name}' for all rows.\n2: To exit.\n")
fill = numinput_taker(fill, "Please provide a valid input", ['1', '2'])
if fill == 2:
return
values = list_to_dict(num_of_value_checker(num_of_rows))
bulk_insert(tbl_name,name,values)
如果您尝试将字符串转换为整数,但该字符串不包含前导数字字符,因此转换不明确,则在严格模式下会发生错误。
您说您正在尝试设置 varchar 列,但该错误也可能发生在比较中。
这是一个演示:
mysql> create table table_name (id int primary key, name varchar(100));
mysql> insert into table_name values (1, 'name');
mysql> update table_name set name = 'string' where id = 'abc';
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'abc'
此示例中的字符串
'abc'
并未完全转换为数值,因此在与整数列 id
进行比较时,它会在严格模式下导致错误。
mysql> update table_name set name = 'string' where id = '123';
Query OK, 0 rows affected (0.00 sec)
在这种情况下,字符串
'123'
确实转换为数值123
,因此它满足严格模式。
因此,如果您正确地认为要更新的列是 varchar (存储字符串没有问题),那么我猜您的 dict 键作为数值无效。