【python】sqlite3を使用して、if文とfor文を組み合わせて、UPDATEを成功させる。

題名にも書きましたように、sqlite3を使用して、「INSERT INTO」でデータベースに格納したものを、「UPDATE」で更新させたいと思います。

リストにマイケル、バックエル、マホーンという人物を格納する。マイケルのみ、「私が主人公のマイケルです」と更新されるようにする。

まずは以下のコードで名前をデータベースに格納しました。

import sqlite3
import time
conn = sqlite3.connect("test6.db")
cur = conn.cursor()
names = ["マイケル","バックエル","マホーン"]
cur.execute('CREATE TABLE name(id INTEGER PRIMARY KEY AUTOINCREMENT ,na TEXT)')
sql = 'INSERT INTO name(na) VALUES(?)'
for i in range(0,len(names)):
    cur.execute(sql,(names[i],))
    time.sleep(1)
cur.execute('SELECT * FROM name')
print(cur.fetchall())
conn.close()

pythonの実行環境は「jupyter lab」を使用しています。「conn.commit()」はpycharmでデータベースに格納したものをターミナルで確認する場合は必要ですが、SELECT文を実行した後で「cur.fetchall()」などを使用すれば、データベースに格納したものを確認できるので、記述していません。

話はかなり脱線しますが、私はプログラミングの勉強していると、作成途中のプログラムでも保存しておきたいと思うことが多々あります。それで、また、新たにpythonファイルを作成するのですが、結局、古いpythonファイルの作業フォルダが整理整頓ができていないことが多いです。

しかし、ブログを通して、上のように途中経過のコードも張り付けておくと、後で見たいときも探しやすく、非常に便利かなと思います。

完成コードは以下になります。

import sqlite3
import time
conn = sqlite3.connect("test15.db")
cur = conn.cursor()
names = ["マイケル","バックエル","マホーン"]
cur.execute('CREATE TABLE name(id INTEGER PRIMARY KEY AUTOINCREMENT ,na TEXT)')
sql = 'INSERT INTO name(na) VALUES(?)'
for i in range(0,len(names)):
    cur.execute(sql,(names[i],))
    time.sleep(1)
    if names[i] == "マイケル":
        cur.execute('UPDATE name SET na = "私が主人公のマイケルです。"WHERE na = "マイケル"')
        
cur.execute('SELECT * FROM name')
print(cur.fetchall())
conn.close()
	

11行目に変数namesの後ろに[i]を付け忘れていて、なかなかコードを完成させることができなかった。また、pythonは「=」が変数に格納するときに使用して、「==」が条件式が等しいときにという意味で使用する。SQLでは「=」も「==」もどちらも条件式が等しいという意味になるようです。