[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')

[Python] 343 MySQL自動検索

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

MySQLを起動、ログイン、データベース選択、検索まで自動的に行うスクリプトを作成しました。

処理時間はphpMyAdminよりも24%長く掛かってしまいました。

データベースを作ってしまえばあとは検索するだけなので、開発環境Aの方が総合的に優れていると取りあえず判断しました。

ターミナルでのMySQL管理に期待したのですが、なんとも残念な結果です。

ただ全テーブル内検索の場合は対象テーブルが400以上あってハードにかなり負荷をかけるため、単純に処理時間が比例するとも限りません。

もう少し検討が必要かもしれません。

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()

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

# 検索
search = f"SELECT * FROM `TableA` WHERE `Address` LIKE '%東京都%'"
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')

[Python] 342 MySQL自動起動 ターミナルコマンド

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

HomebrewからインストールしたMySQLを自動起動させるスクリプトを書きました。パスワード入力は無効にしています。

Pythonはデータ型を意識しなくてもいいのでメモ感覚で楽に書けますね。

import time,datetime,subprocess,os

start = time.time()

# 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は起動しています")

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

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