代码语言: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`语句来自动管理游标资源,确保即使在发生异常时也能正确关闭游标。
- 在实际应用中,你可能需要根据实际的数据结构和业务逻辑来生成和插入数据。
这种方法可以显著提高插入大量数据的效率,因为它减少了与数据库的通信次数和事务提交的次数。