プログラムは3日で忘れる私が再びpython3メモ pymysql
プログラムはちょっとやらないと忘れる。 数ヶ月前にやったはずなのに、いざ再開すると、同じところでつまづく。今回は MySQL接続で利用するpymysqlでのメモをします。エラートラップとか例外とかは、書いてません。ちゃんとかける方はこのページなんかみないと思いますので簡単に書きました。
そして、これも書いたことを忘れるんだろうなきっと。
動いたってベースなので、あくまでも私自身のメモ
宣言部
こーいう風に書いてました
import pymysql.cursors
グローバルスコープ
こんな感じで書きました_charset=utf8mb4に関しては、接続先のDBがそうだったので、設定しました。(逆にこれ設定しないと謎のエラーが頻発しました。
_host = "host1.local" _uid = "myuser" _pwd = "passwd" _schema = "shecma1" _charset='utf8mb4'
コネクションの確立
関数化っていうの?笑 関数化しました
def getConnection(): return pymysql.connect( host=_host, user=_uid, password=_pwd, database=_schema, charset=_charset, cursorclass=pymysql.cursors.DictCursor )
実行部
検索 (SELECT)
SQLでクエリーを実行した結果を、ディクショナリ型の配列に格納し、コネクションをクローズしたあと、配列をループしてごにょごにょする
def main(): cn = getConnection() c = cn.cursor() _sql = ''' SELECT m.Id As id, m.Title AS title, m.Artist AS artist FROM music m WHERE v.id = '{_id}' OR v.title LIKE '{_Title}%' '''.format(_id = isNum(num),_title = word).strip() c.execute(_sql) _musics = c.fetchall() c.close() cn.close() for a in _musics: _seq+=1 _title = key['title'] _artist = key['artist'] print _seq, _titile, _artist
INSERT
接続の話は、上と同じなので省略、この例は上記でループしているデータをtablebにインサートしています。 (コネクションを2重発行しているのが、ちょっといけない例かもしれません。全てのINSERT処理が終わったあと、commit発行
for a in _musics: _seq+=1 _title = key['title'] _artist = key['artist'] _sql = "INSERT INTO tableb (Seq, Title, Artist) VALUES (%s, %s, %s) ;" c = cn.cursor() c.execute(_sql, (_seq, _title, _artist)) c.close() cn.commit() cn.close()