接下来我会分享一下“Python实现 多进程导入CSV数据到 MySQL”的完整攻略。该攻略分为以下几个步骤:
步骤一:准备工作
- 安装Python和MySQL;
- 安装Python库pandas和MySQLdb。这两个库可以通过pip安装。
步骤二:读取CSV数据
可以使用pandas库中的read_csv()函数来读取CSV文件,在此函数中传入CSV文件的路径和一些其他参数,例如分隔符、列名等信息。
下面是一个读取CSV文件并显示前5行数据的示例:
import pandas as pd
df = pd.read_csv('example.csv', delimiter=',', names=['A', 'B', 'C'])
print(df.head())
步骤三:创建MySQL数据库和表
在MySQL中创建一个名为my_db的数据库和名为my_table的表,用于存储CSV文件中的数据。以下是示例代码:
CREATE DATABASE my_db;
USE my_db;
CREATE TABLE my_table (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
A VARCHAR(255),
B VARCHAR(255),
C VARCHAR(255)
);
步骤四:连接数据库
可以使用MySQLdb库中的connect()函数来连接MySQL数据库。
下面是一个连接MySQL数据库的示例:
import MySQLdb
conn = MySQLdb.connect('localhost', 'user', 'password', 'my_db', charset='utf8')
步骤五:多进程导入CSV数据到MySQL
这是此攻略最核心的一步。可以使用Python标准库multiprocessing中的Pool类实现多进程导入CSV数据到MySQL。Pool类是一个代表进程池的类,它可以管理进程。
以下是一个示例代码,代表着执行6个进程来并发地将CSV文件中的数据导入到MySQL中。此示例是假设CSV文件中每行数据的格式为A,B,C,且数据均为字符串类型,若实际情况有不同的需求,可根据具体情况来调整以下代码:
import pandas as pd
import MySQLdb
from multiprocessing import Pool
def import_csv_to_mysql(file_path, pool_size=6):
# 读取CSV文件
df = pd.read_csv(file_path, delimiter=',', names=['A', 'B', 'C'])
# 连接MySQL数据库
conn = MySQLdb.connect('localhost', 'user', 'password', 'my_db', charset='utf8')
# 设定进程池大小
pool = Pool(pool_size)
# 并发地将CSV文件中的数据导入到MySQL
for index, row in df.iterrows():
a = row['A']
b = row['B']
c = row['C']
pool.apply_async(insert_data_to_mysql, args=(conn, a, b, c))
# 关闭进程池
pool.close()
pool.join()
# 关闭数据库连接
conn.close()
def insert_data_to_mysql(conn, a, b, c):
cursor = conn.cursor()
sql = 'INSERT INTO my_table (A, B, C) VALUES ("%s", "%s", "%s")' % (a, b, c)
cursor.execute(sql)
conn.commit()
cursor.close()
if __name__ == '__main__':
import_csv_to_mysql('example.csv', pool_size=6)
以上示例代码中,insert_data_to_mysql()函数执行了插入数据到MySQL的操作,并由import_csv_to_mysql()函数并发地调用。其中,apply_async()函数表示非阻塞方式向进程池中提交任务,由进程池中的进程异步执行。
示例说明
- 如果file_path是'example.csv',那么导入的CSV文件应该是在代码所在目录下的一个名为example.csv的文件;
- 如果'example.csv'文件中的前三行数据如下所示:
A,B,C
1,2,3
4,5,6
那么执行导入操作后,my_table表中的数据应该是以下内容:
+----+---+---+---+
| id | A | B | C |
+----+---+---+---+
| 1 | 1 | 2 | 3 |
| 2 | 4 | 5 | 6 |
+----+---+---+---+
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现 多进程导入CSV数据到 MySQL - Python技术站