Python中往MySQL写数据出现的问题,如何解决?

用多线程通过 pymysql 向 mysql 写入数据,报错 “ Packet sequence number wrong",是什么原因呢?


Python中往MySQL写数据出现的问题,如何解决?
7 回复

多线程的策略有问题,google 一下就明白了
另外这个如果想找大家帮忙,需要贴源代码出来


遇到往MySQL写数据的问题,通常有几个常见原因和对应的解决方法。下面我直接给几个典型场景和代码示例。

1. 连接问题

import mysql.connector

try:
    conn = mysql.connector.connect(
        host="localhost",
        user="your_username",
        password="your_password",
        database="your_database"
    )
    cursor = conn.cursor()
    # 你的插入操作
    cursor.execute("INSERT INTO table (col) VALUES (%s)", ("data",))
    conn.commit()
except mysql.connector.Error as err:
    print(f"连接错误: {err}")
finally:
    if 'conn' in locals() and conn.is_connected():
        cursor.close()
        conn.close()

2. 编码问题 确保连接时指定字符集:

conn = mysql.connector.connect(
    charset='utf8mb4',
    # 其他参数...
)

3. 数据类型不匹配 检查表结构和插入数据是否匹配:

# 假设表结构:id INT, name VARCHAR(255)
data = (1, "测试数据")  # 正确
# data = ("字符串", 123)  # 错误:类型不匹配
cursor.execute("INSERT INTO table (id, name) VALUES (%s, %s)", data)

4. 主键/唯一约束冲突 插入前先检查是否存在:

cursor.execute("SELECT id FROM table WHERE id = %s", (some_id,))
if cursor.fetchone():
    print("记录已存在")
else:
    cursor.execute("INSERT INTO table (id) VALUES (%s)", (some_id,))

5. 事务未提交 记得执行conn.commit(),或者使用自动提交模式:

conn.autocommit = True

如果你能提供具体的错误信息或代码片段,我可以给出更针对性的解决方案。先检查连接和字符集设置,这两个最常见。

升级 pymysql

换个 pymysql 版本试试?

我发现每启动一个线程,就要进行一次与数据库的连接,conn=pymysql.connect(**database),这样就不会报错,而所有线程共用一个连接对象 conn 就会出错,不知道这是什么原因

几种解决方案:
1. 每个线程拥有自己的连接
2. 所有线程共用一个连接,加锁互斥使用此连接
3. 所有线程共用一个连接池,需要考虑线程总数和连接池连接数上限的问题

感谢答复

回到顶部