双值错误,因为我试图通过 python 批量插入 mysql 中的列

问题描述 投票:0回答:1

这是我收到的错误: 错误: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)
python mysql mysql-python
1个回答
-1
投票

如果您尝试将字符串转换为整数,但该字符串不包含前导数字字符,因此转换不明确,则在严格模式下会发生错误。

您说您正在尝试设置 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 键作为数值无效。

© www.soinside.com 2019 - 2024. All rights reserved.