pymysql批量插入数据

2024-09-05 15:44:52 浏览数 (2)

代码语言:txt复制
使用`pymysql`库在Python中循环插入大量数据时,可以采用以下步骤来提高效率:

1. 使用`executemany`方法进行批量插入,而不是在循环中对每条数据调用`execute`。
2. 适当时候提交事务,而不是每插入一条数据就提交一次,这样可以减少事务提交的开销。
3. 使用游标(cursor)对象的`executemany`方法来执行批量插入。

以下是一个使用`pymysql`库循环插入大量数据的示例:

```python
import pymysql

# 连接到MySQL数据库
connection = pymysql.connect(
    host='localhost',
    user='yourusername',
    password='yourpassword',
    database='yourdatabase',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

try:
    with connection.cursor() as cursor:
        # 准备批量插入的数据
        data = []
        for i in range(1000):  # 假设我们要插入1000条数据
            # 假设我们要插入随机数据
            id = i
            name = "Name"   str(i)
            score = round(random.uniform(60, 100), 2)
            data.append((id, name, score))

        # 插入数据的SQL语句
        insert_query = "INSERT INTO tablename (id, name, score) VALUES (%s, %s, %s)"

        # 执行批量插入操作
        cursor.executemany(insert_query, data)

        # 提交事务
        connection.commit()
        print(f"{cursor.rowcount} 行数据插入成功。")

except pymysql.MySQLError as e:
    print("插入数据时出错:", e)

finally:
    if connection:
        connection.close()
        print("MySQL连接已关闭。")
```

在这个示例中,我们首先创建了一个空的数据列表`data`,然后通过循环生成要插入的数据,并将其添加到`data`列表中。循环完成后,我们使用`executemany`方法一次性将所有数据插入到数据库中。

请注意以下几点:
- 你需要将`yourusername`、`yourpassword`、`yourdatabase`和`tablename`替换为实际的数据库用户名、密码、数据库名和表名。
- 在`pymysql.connect`函数中,`charset='utf8mb4'`确保了字符集的正确设置,这对于支持全字符集(如表情符号)是必要的。
- `cursorclass=pymysql.cursors.DictCursor`使得游标返回的数据以字典形式表示,这使得访问列数据更加方便。
- 我们使用`with`语句来自动管理游标资源,确保即使在发生异常时也能正确关闭游标。
- 在实际应用中,你可能需要根据实际的数据结构和业务逻辑来生成和插入数据。

这种方法可以显著提高插入大量数据的效率,因为它减少了与数据库的通信次数和事务提交的次数。

0 人点赞