Database JUNKY

MySQL,MariaDBを中心としたブログです

プログラムは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()

f:id:hit10231023:20180302202040p:plain