プログラムはちょっとやらないと忘れる。 数ヶ月前にやったはずなのに、いざ再開すると、同じところでつまづく。今回は 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()
