🐬
MySQL:CSVのインポートSQLをループで実行するとIDが不連続になる
pythonで以下のように、フォルダ内の複数のcsvファイルをimportする場合に、IDが飛ぶ場合がありました。テーブルのENGINEは、innoDBです。
# 1. インポート対象のファイルとテーブルをリストで定義
import_map = [
('users.csv', 'users_table'),
('products.csv', 'products_table'),
('orders.csv', 'orders_table'),
]
# 2. CSVファイルが格納されているディレクトリ
csv_dir = './csv_data'
# 3. リストをループして1件ずつ処理
for csv_file, table_name in import_map:
try:
# ファイルのフルパスを生成
file_path = os.path.join(csv_dir, csv_file).replace('\\', '/')
print(f"処理中: {file_path} -> {table_name}")
# LOAD DATA LOCAL INFILE クエリを生成
# IGNORE 1 LINES はCSVのヘッダー行を読み飛ばす設定
query = f"""
LOAD DATA LOCAL INFILE '{file_path}'
INTO TABLE `{table_name}`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
"""
# クエリを実行
# cursor.execute(query) # 実際のコードではこの行のコメントを外す
# 成功メッセージ
print(f"-> 成功: '{csv_file}' を '{table_name}' にインポートしました。")
except Exception as e:
# エラーが発生した場合はメッセージを表示して次のファイルへ
print(f"-> エラー: '{csv_file}' のインポートに失敗しました。理由: {e}")
continue
この状況を解消するには、以下の設定を、my.iniに記載して再起動したら直りました。
または、テーブルのENGINEをMyISAMの場合も連続になりました。
innodb_autoinc_lock_mode=0
Discussion