ホームページ  >  記事  >  データベース  >  Excel データの Mysql へのインポートに関するよくある質問のまとめ: データのインポート時に大量のバッチ挿入の問題を解決するにはどうすればよいですか?

Excel データの Mysql へのインポートに関するよくある質問のまとめ: データのインポート時に大量のバッチ挿入の問題を解決するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-09-08 11:07:481223ブラウズ

Excel データの Mysql へのインポートに関するよくある質問のまとめ: データのインポート時に大量のバッチ挿入の問題を解決するにはどうすればよいですか?

Excel データの Mysql へのインポートに関するよくある質問のまとめ: データのインポート時に大量のバッチ挿入が発生する問題を解決するにはどうすればよいですか?

Excel データを MySQL にインポートすることは、日常の開発でよく遭遇するタスクの 1 つです。少量のデータをインポートする場合は、データベース クライアント ツールまたはコマンド ラインを使用して挿入操作を実行できます。しかし、大量のデータ インポートに直面した場合、単純な 1 回の挿入操作によって、間違いなく深刻なパフォーマンスの問題が発生します。この記事では、この問題を解決する方法と、対応するコード例を示します。

問題の説明:
実際の使用では、Excel テーブル内の大量のデータを MySQL データベースにインポートする必要がある場合、1 回の挿入の効率が低すぎるため、インポート操作が非常に遅くなります。 。これは、多くの時間を無駄にするだけでなく、データベース接続のタイムアウトやメモリ オーバーフローなどの問題を引き起こす可能性もあります。

解決策:
インポートの効率を向上させるために、バッチ挿入を使用して複数のレコードを一度にデータベースに挿入できます。 MySQL ではこの目的を達成するためにさまざまな方法が提供されていますが、以下ではよく使用される 3 つの方法を紹介します。

  1. INSERT INTO...VALUES ステートメントを使用する
    バッチ挿入は、INSERT INTO...VALUES ステートメントを作成することによって実現されます。具体的な手順は次のとおりです:

① Excel テーブルを読み取り、データを 2 次元配列に格納します;
② 2 次元配列を VALUES 句の文字列形式に変換します。 ;
③ INSERT INTO ステートメントを結合し、VALUES 句をデータベースに挿入します。

コード例:

import xlrd
import pymysql

# 连接数据库
conn = pymysql.connect(host='localhost', user='root', password='password', database='database')
cursor = conn.cursor()

# 读取Excel表格数据
data = xlrd.open_workbook('data.xlsx')
table = data.sheet_by_name('Sheet1')
rows = table.nrows

# 构建values子句
values = []
for i in range(1, rows):
    values.append(tuple(table.row_values(i)))

# 批量插入
sql = "INSERT INTO table_name (column1, column2, column3) VALUES (%s, %s, %s)"
cursor.executemany(sql, values)
conn.commit()

# 关闭连接
cursor.close()
conn.close()
  1. LOAD DATA INFILE ステートメントの使用
    MySQL には、ファイルからデータをインポートするための LOAD DATA INFILE ステートメントが用意されています。データをCSVファイルとして保存し、LOAD DATA INFILE文を使用してデータベースに一括インポートすることで、インポート効率が大幅に向上します。

コード例:

LOAD DATA INFILE 'data.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '
'
IGNORE 1 LINES;
  1. バッチ挿入ツールの使用
    コードを手動で記述してバッチ挿入を実装するだけでなく、いくつかのツールを使用して処理を自動化することもできます。たとえば、Python の pandas ライブラリを使用して、to_sql メソッドを呼び出して DataFrame 内のデータを MySQL データベースに直接挿入できます。

コード例:

import pandas as pd
from sqlalchemy import create_engine

# 连接数据库
engine = create_engine('mysql+pymysql://root:password@localhost/database')

# 读取Excel表格数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 批量插入
df.to_sql('table_name', engine, if_exists='append', index=False)

# 关闭连接
engine.dispose()

概要:
Excel データを MySQL にインポートする場合、単一の挿入方法を使用すると効率が悪く、大量のデータ バッチのインポート ニーズを満たすことができません。一括挿入やツールを利用することで、インポートの効率が大幅に向上し、インポート時間を短縮できます。どの方法を使用するかは、個人のニーズと状況によって異なります。この記事の紹介と例が、データのインポート時に発生する一括挿入の問題を読者が解決するのに役立つことを願っています。

以上がExcel データの Mysql へのインポートに関するよくある質問のまとめ: データのインポート時に大量のバッチ挿入の問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。