5万条数据导入MySQL的艰辛过程(5万条导入MySQL)

5万条数据导入MySQL的艰辛过程

在大量数据的存储、处理和分析方面,MySQL是一个非常流行的关系型数据库管理系统。但对于初学者来说,将大量数据导入MySQL数据库是一个具有挑战性的过程。在这篇文章中,我们将分享导入5万条数据到MySQL数据库的艰辛过程。

在导入数据之前,首先需要创建数据库和表。我们使用以下代码创建了一个名为“test”的数据库和名为“customers”的表,其中包含ID、姓名和电子邮件字段。

CREATE DATABASE test;
USE test;
CREATE TABLE customers(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
eml VARCHAR(50)
);

接下来,我们需要准备数据。为了模拟真实场景,我们使用Python生成5万条随机数据并将其保存在CSV文件中。Python代码如下:

import csv
import random
import string
# 生成随机的姓名和电子邮件
def get_random_name(n):
return ''.join(random.choices(string.ascii_uppercase, k=n))

def get_random_eml(n):
return ''.join(random.choices(string.ascii_lowercase + string.digits, k=n)) + '@example.com'
# 生成随机数据并将其保存到CSV文件中
with open('data.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['name', 'eml'])
for i in range(50000):
name = get_random_name(random.randint(5, 10))
eml = get_random_eml(random.randint(5, 15))
writer.writerow([name, eml])

现在我们已经成功生成了一个名为“data.csv”的文件,接下来我们需要将其导入到MySQL数据库中。我们可以使用以下代码从CSV文件中读取数据并将其插入到MySQL表中:

import mysql.connector
import csv

# 连接到MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="test"
)

# 打开CSV文件并将数据插入到MySQL表中
with open('data.csv') as file:
reader = csv.reader(file)
next(reader) # 跳过标题行
for row in reader:
name, eml = row
sql = "INSERT INTO customers (name, eml) VALUES (%s, %s)"
val = (name, eml)
cursor = mydb.cursor()
cursor.execute(sql, val)
mydb.commit()
print(cursor.rowcount, "record inserted.")

然而,在导入数据时,我们遇到了一些问题。导入速度很慢,因为每行数据都需要进行一次插入操作,这会导致大量的数据库交互和磁盘I/O。我们发现在导入过程中,MySQL数据库连接经常超时。

为了解决这些问题,我们可以使用MySQL的“LOAD DATA INFILE”语句将CSV文件直接导入到MySQL表中。这种方法比插入操作快得多,并且不会在导入过程中导致数据库连接超时。我们可以使用以下代码将CSV文件导入到MySQL表中:

import mysql.connector
# 连接到MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="test"
)

# 将CSV文件导入到MySQL表中
cursor = mydb.cursor()
sql = "LOAD DATA INFILE 'data.csv' INTO TABLE customers FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
cursor.execute(sql)
mydb.commit()
print(cursor.rowcount, "record(s) imported.")

在使用“LOAD DATA INFILE”语句导入数据时,需要注意以下几点:

1. 必须确保MySQL用户拥有从文件系统读取文件的权限。

2. 在导入过程中,必须正确指定CSV文件的分隔符和行终止符。

3. 需要确保CSV文件的格式与MySQL表的格式匹配。

总结

将大量数据导入MySQL数据库可以极大地提高数据处理和分析的效率,但这也是一个具有挑战性的过程。在本文中,我们分享了将5万条数据导入MySQL数据库的过程,并介绍了使用“LOAD DATA INFILE”语句直接导入CSV文件的技巧。希望这篇文章可以对那些正在学习MySQL的初学者有所帮助。


数据运维技术 » 5万条数据导入MySQL的艰辛过程(5万条导入MySQL)