Có nhiều cách để tối ưu hóa phần chèn này. Dưới đây là một số ý tưởng:
- Bạn có một vòng lặp for trên toàn bộ tập dữ liệu. Bạn có thể thực hiện
commit()
cứ sau 100 hoặc lâu hơn - Bạn có thể chèn nhiều hàng vào một lần chèn
- bạn có thể kết hợp cả hai và chèn nhiều hàng sau mỗi 100 hàng trên CSV của mình
- Nếu python không phải là yêu cầu bắt buộc, bạn có thể thực hiện trực tiếp bằng MySQL vì nó được giải thích tại đây . (Nếu phải sử dụng python, bạn vẫn có thể chuẩn bị câu lệnh đó bằng python và tránh lặp qua tệp theo cách thủ công).
Ví dụ:
đối với số 2 trong danh sách, mã sẽ có cấu trúc như sau:
def csv_to_DB(xing_csv_input, db_opts):
print("Inserting csv file {} to database {}".format(xing_csv_input, db_opts['host']))
conn = pymysql.connect(**db_opts)
cur = conn.cursor()
try:
with open(xing_csv_input, newline='') as csvfile:
csv_data = csv.reader(csvfile, delimiter=',', quotechar='"')
to_insert = []
insert_str = "INSERT INTO table_x (ID, desc, desc_version, val, class) VALUES "
template = '(%s, %s, %s, %s, %s)'
count = 0
for row in csv_data:
count += 1
to_insert.append(tuple(row))
if count % 100 == 0:
query = insert_str + '\n'.join([template % r for r in to_insert])
cur.execute(query)
to_insert = []
conn.commit()
query = insert_str + '\n'.join(template % to_insert)
cur.execute(query)
conn.commit()
finally:
conn.close()