web系な備忘録

私が忘れてもブログがあるもの

Python→MySQL nullの挿入

 Pythonって区切り文字の扱いがとっても簡単でいいですね。どんどんタプルにつっこみたくなります。そのままPreparedStatement的な役割を果たすexecutemanyなる関数で大量に挿入できるのもありがたい!
 で,PythonMySQLでexecutemanyを使ってNULLを入れるときに少し詰まったのでメモ。

データ例

名前 好きな教科(3〜4)
佐藤 国語,算数,理科,社会
鈴木 算数,理科,音楽
高橋 国語,理科,体育,音楽

データが4つとか3つで,空いたところをnullで埋めておきたい場合,Noneを使うと良い。

import MySQLdb


db = MySQLdb.connect(host="*****.jp", user="user", passwd="pass", db="db", charset="utf8")
c = db.cursor()

cnt = 0
dataL = []
for line in open('../subject.txt', 'r'):
    itemL = line[:-1].split('\t')
    subjectL = itemL[1].split('.')

    if(len(subjectL)==4):	# 要素が4つならそのまま
        tpl = (itemL[0], subjectL[0], subjectL[1], subjectL[2], subjectL[3])
        dataL.append(tpl)

    elif(len(subjectL)==3):	# 要素が3つなら最後をnullで埋める(DBカラムはnull可に設定済)
        tpl = (itemL[0], subjectL[0], subjectL[1], subjectL[2], None)
        dataL.append(tpl)

c.executemany('insert ignore into Item (ItemID, Subject1, Subject2, Subject3, Subject4) values (%s, %s, %s, %s, %s)', dataL)

c.close()
db.close()

できた!ヽ(゚∀゚)ノ