Excel データの Mysql へのインポートに関するよくある質問のまとめ: データのインポート時に大量のバッチ挿入が発生する問題を解決するにはどうすればよいですか?
Excel データを MySQL にインポートすることは、日常の開発でよく遭遇するタスクの 1 つです。少量のデータをインポートする場合は、データベース クライアント ツールまたはコマンド ラインを使用して挿入操作を実行できます。しかし、大量のデータ インポートに直面した場合、単純な 1 回の挿入操作によって、間違いなく深刻なパフォーマンスの問題が発生します。この記事では、この問題を解決する方法と、対応するコード例を示します。
問題の説明:
実際の使用では、Excel テーブル内の大量のデータを MySQL データベースにインポートする必要がある場合、1 回の挿入の効率が低すぎるため、インポート操作が非常に遅くなります。 。これは、多くの時間を無駄にするだけでなく、データベース接続のタイムアウトやメモリ オーバーフローなどの問題を引き起こす可能性もあります。
解決策:
インポートの効率を向上させるために、バッチ挿入を使用して複数のレコードを一度にデータベースに挿入できます。 MySQL ではこの目的を達成するためにさまざまな方法が提供されていますが、以下ではよく使用される 3 つの方法を紹介します。
① 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()
コード例:
LOAD DATA INFILE 'data.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 1 LINES;
コード例:
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 サイトの他の関連記事を参照してください。