pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Python:MySQLデータベース名の重複を調べる。

Win10(64)でPython3、MySQL8使って、くじけそうになりながら少しずつ勉強してます(≒ほぼウソ)。

MySQLのインストールは特段の変更をしてないので設定はほぼデフォルトで用意されたような状態です。パスワードだけ自分用のを使っている…ということで…。

10/19追記:「データベース名の重複」と単純に書くと誤解が生じる可能性が(汗)。新たに作ろうとするデータベース名が既存のデータベース名と重複しないか調べる、という意味です、今回の作業は、はい。

<PythonでMySQLに接続し、既存データベース名を取得し、新規作成候補名が重複しているか調べる>

#MySQL接続
import MySQLdb
serv=MySQLdb.connect(
    host='localhost',
    user='root',
    password='パスワード' #←ご自分用のPW入力してくださいね
)
#新規DB候補名:次行へ新たに作りたいデータベース候補名をmysql部分に上書き入力
newDBName='mysql' 

#既存DB名と新規DB候補名の重複チェック
myc = serv.cursor()
myc.execute('show databases')
n=0
for x in myc:
    print ('now on',n)
    if x[0]==newDBName:
        print (newDBName +' : exist on ' , n)
        break 
    else:
        print('     not equal on ', n)
    n +=1
else:
    print('nothing')

#MySQL切断・終了
myc.close()
serv.close()

<あれこれの言い訳>

PythonとMySQLは、mysqlconnectorが仲介しております。また、その際MySQLdbをimportするという横着をいたしております。

新規DB候補名は、スクリプトに直接書き込むという横着をいたしました。

for文の繰り返し回数を自動で表示する機能とかはないんですかね…爺にはよくわかりません。なのでn=0から始まる足し算をしていくやり方ですませました。なくても一向にかまわないのですが、スクリプトが動いている確認という程度のことであります…。

for文のxに入るのは「タプル」という爺にはよくわからない、もの、だそうです。if文のx[0]は、for文で0番目から始まるタプルの中身(今回は既存データベース名)が順次値となるようです。forが繰り返され、0から最後まで進行する…んでしょうね。

break文はちょっとびっくりしました。条件合致したときif文から抜けるのかと思ったのですが、for文から抜けるんですね。

else文は、ifにひとつ、forにひとつ使いました。ifの方はなんとなく経験がありますがforの方は初めてであります。
ifに対応したelseの部分はある意味不要なスクリプトです。挙動を見るのに、とりあえず、という程度でごらんくださいませ…。

breakが実行されると、一気にforの外に出るんですね。このスクリプトだと、既存DB名と新規作成候補DB名が一致する( if x[0]==newDBName:)と、breakのあと、MySQL接続が終了するということになるみたいです(爺の勘違い、思い込みかも…)。

<その結果>

前出のスクリプトは、データベース名のチェックだけでありまして、新規作成の部分は含んでおりませぬ。重複がなければ、候補名でデータベースを作りなさい、ということでcreate文を実行すればよさそう、かと。

すでにお気づきとは思いますが、「if not exist」などを使い簡単に済ますことができることをあえて無視しております。つまり、MySQLを便利に使っている方にはキット今更~なことかと想像します。初心者の爺には、こういったあたりが大きな峠になったりしておるのです…グスン。