Python→MySQL nullの挿入
Pythonって区切り文字の扱いがとっても簡単でいいですね。どんどんタプルにつっこみたくなります。そのままPreparedStatement的な役割を果たすexecutemanyなる関数で大量に挿入できるのもありがたい!
で,Python→MySQLで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()
できた!ヽ(゚∀゚)ノ