MySQLでテーブルを一旦削除してから新たに作成する操作をする際、テーブルが存在しなくてもエラーにならないようSQL文に”IF EXISTS”を付けたのですが機能しません。
SQL文作成はf文字列でもformatメソッドでもNGでした。
仕方がないので、エラーを無視してtry-except-finallyでテーブルを作成するようにしました。
原因は不明ですが、mysql.connectorモジュールがおかしいのでしょうか。
import csv,mysql.connector,glob
import pandas as pd
<中略>
# sqlのリストを作成
sql_l = list()
for table in table_l:
sql = f"DROP TABLE IF EXISTS horse_race_name.{table}"
sql_l.append(sql)
sql_l2 = list()
for table in table_l:
sql = f"CREATE TABLE horse_race_name.{table} {column_l_str}"
sql_l2.append(sql)
# mysqlに接続
conn = mysql.connector.connect(**config)
cur = conn.cursor()
# データベースhorse_race_nameにtableを作成する
for file,table,sql,sql2 in zip(file_l,table_l,sql_l,sql_l2):
try:
cur.execute(sql)
except Exception as e:
print(e)
finally:
try:
cur.execute(sql2)
except Exception as e:
print(e)
else:
cur.execute('BEGIN')
# CSVファイルを読み込み、各行をtableに挿入する
with open(file, 'rt', encoding='Shift-JIS') as f:
reader = csv.reader(f)
for i,row in enumerate(reader):
if i != 0:
row_str = str(row).replace('[','(').replace(']',')')
sql3 = f'INSERT INTO horse_race_name.{table} VALUES {row_str}'
cur.execute(sql3)
cur.execute('COMMIT')
conn.close()