pythonとsqliteでデータベースのデータ更新「update users」

pythonで作ったsqliteのデータベースで名前カラムと住所カラムがあるとします。

今回は名前カラムを検索して名前を更新できるようにしたいと思います。更新したいカラムを選択できるようにすることもできるかと思いますが、今回その機能はつけません。

update usersのサンプルコード

# sqlite3モジュールの読み込み
import sqlite3

# 表示用関数
def printuser():
    print("\n") # 空行
    sql = "select * from users"
    for row in c.execute(sql):
        print(row)
    print("\n") # 空行

# データベースに接続
conn = sqlite3.connect(".\desktop\database\database.sqlite")

# カーソルオブジェクトの作成
c = conn.cursor()

print('\n') # 空行

# 表示
printuser()

#名前検索
username = input("which username?")

c.execute("select count(*) from users where name='%s'" % username)
if c.fetchone() == (0,):
    print("\n")
    print(str(username) + "no search username")
else:
    new_username = input("new_username?")
    sql = "update users set name = '%s' where name = '%s'" % (new_username, username)
    c.execute(sql)

    # コミット
    conn.commit()

    # 確認
    print("\n")
    print(str(username) + " to " + str(new_username) + " updated")

# 更新されたユーザーを表示
select = "select * from users where name = '%s'" % new_username
for row in c.execute(select):
    print(row)

print('\n') # 空行

# エンターキー
input("exit?")

# データベースの切断
conn.close()

このプログラムのポイントは32行目だと思います。%sを2回使った場合は()で閉じる必要があります。

インタラクティブに操作できるようにする

前に書いた記事と同じになりますが、PowerShellのコードです。これでインタラクティブに操作できるようにします。前見出しのコードのファイル名はupdate_user.pyになります。

# 表示
write-host "`n1: create_table.py`n2: drop_table.py`n3: insert_user.py`n4: delete_user.py`n5: .tables.py`n6: .users.py`n7: update_user.py`n8: where_name.py`n"

# 入力受付
$num = read-host "please select program_number"

# 条件分岐
switch ($num){
    1 {ii "create_table.py"; break}
    2 {ii "drop_table.py"; break}
    3 {ii "insert_user.py"; break}
    4 {ii "delete_user.py"; break}
    5 {ii ".tables.py"; break}
    6 {ii ".users.py"; break}
    7 {ii "update_user.py"; break}
    8 {ii "where_name.py"; break}
    default {"`nerror your_input_number nosuchfile`n"}
}

update_user

参考

ユーザー更新以外のプログラムは当ブログの記事で確認できます。