[Python] 344 MySQL自動検索 全テーブル対象

[M1 Mac, Big Sur 11.7.2, Python 3.10.4, MySQL 8.0.31]

前の記事は1つのテーブルを対象とする自動検索でしたが、今回は全テーブルを対象にしました。

これまでネット情報を見渡してきて、データベース技術者の方々には案外プログラミングが苦手な方が多いのではないかと感じました。修得すべきスキルが広範なためプログラミングまで手が回らないのでしょうか。

import time,datetime,subprocess,os
import MySQLdb

# MySQLの起動確認
proc = subprocess.run("mysqladmin ping", shell=True, stdout= subprocess.PIPE, stderr = subprocess.PIPE)
ping_result = proc.stdout.decode('UTF-8')
print(ping_result)

# 起動していなければ起動
detect = "alive" in ping_result
if detect == False:
    os.system('mysql.server start')
else:
    print("MySQLは起動しています")

# MySQLに接続
conn = MySQLdb.connect(user='root')
cur = conn.cursor()

# 処理時間測定開始
start = time.time()

# データベースdataを選択
select_db = f"use data"
cur.execute(select_db)

# 全テーブルを取得
search_tables = f"show tables"
cur.execute(search_tables)
tables = cur.fetchall()
# print(f"tables : {tables}")

# 検索
for table in tables:
    print(f"table : {table}")
    table2 = str(table).replace('(','').replace(')','').replace(",",'').replace("'",'`')
    search = f"SELECT * FROM {table2} WHERE `Name` LIKE '%suzuki%'"
    cur.execute(search)
    rows = cur.fetchall()
    for row in rows:
        print(row)

    # 処理時間算出(秒)
    process_time = time.time() - start
    td = datetime.timedelta(seconds = process_time).total_seconds()

    # 小数点第2位まで表示
    td_2f = f'{td:.2f}'
    print(td_2f)

conn.close()
os.system('mysql.server stop')