ユーザ情報の検索

Image from Gyazo

ユーザ情報の検索

ログインに成功したら, Usersテーブルからユーザの名前や電話番号などの情報を検索し, 画面に表示しましょう. main.py にユーザ情報を検索・表示するための showUserInfo関数を定義します. この関数では,SELECT文とWHERE句を利用して, 指定されたユーザIDの氏名,電話番号,メールアドレスを検索します. また,検索された情報はpタグで表示されます.

# ユーザ情報の検索・表示
def showUserInfo(id):
    sql = "SELECT name,tel,mail FROM Users WHERE id='" + id + "';"
    records = cur.execute(sql)
    record = records.fetchone()
    name = record[0]
    tel = record[1]
    mail = record[2]

    print("<p>氏名: " + name + "</p>")
    print("<p>電話番号: " + tel + "</p>")
    print("<p>メールアドレス: " + mail + "</p>")    

main.py の下記部分で, 定義したshowUserInfo関数を呼び出します. ログインに成功したときだけ,ユーザの情報が表示されることに注意してください.

if pw == None:
    print("<p>IDが存在しません</p>")
    print("<p><a href='../login.html'>戻る</a></p>")
else:
    if form_pw == pw[0]:
        print("<p>ログインに成功しました</p>")

		# ユーザ情報の検索・表示
        showUserInfo(form_id)
    else:
        print("<p>パスワードが一致しません</p>")
        print("<p><a href='../login.html'>戻る</a></p>")        

ID:u01 ,パスワード:X2ng でログインしてみましょう. 下記のように表示されれば正しく動作しています.

Image from Gyazo

購買履歴の検索

ユーザの購買履歴も合わせて表示しましょう. 購買履歴はHistoriesテーブルから検索します. main.py に購買履歴を検索・表示するためのshowUserHistory関数を定義します. この関数では,SELECT文とWHERE句を利用して,ユーザが購入した履歴を表示します.

# ユーザの購買履歴の検索・表示
def showUserHistory(id):
    sql = "SELECT * FROM Histories WHERE user_id='" + id + "'";
    records = cur.execute(sql)

    print("<h2>購買履歴</h2>")    
    for record in records:
        print("<p>" + str(record) + "</p>")

先程と同様に,定義したshowUserHistory関数を呼び出します.

# ユーザ情報の検索・表示
showUserInfo(form_id)

# ユーザの購買履歴の検索・表示
showUserHistory(form_id)

ID:u01 ,パスワード:X2ng でログインしてみましょう. 下記のように表示されれば正しく動作しています.

Image from Gyazo

上述の方法では,商品IDは表示されますが,商品名が分かりません. そこで,showUserHistory関数を,商品名も表示されるように修正しましょう. 商品名を表示するには,HistoriesテーブルとItemsテーブルを結合(内部結合)する必要があります. そこで,SELECT文INNER JOIN 句を利用して,テーブルを結合します.

# ユーザの購買履歴の検索・表示
def showUserHistory(id):
    sql = "SELECT * FROM Histories INNER JOIN Items ON Histories.item_id=Items.id WHERE user_id='" + id + "'";
    records = cur.execute(sql)

    print("<h2>購買履歴</h2>")    
    for record in records:
        print("<p>" + str(record) + "</p>")

結合した結果は下記のように表示されます.

Image from Gyazo

表示されたレコードはユーザIDや商品IDなど不要なデータが含まれています. そこで,SELECT文で射影をして,購入日時,商品名,価格のみを表示させましょう. また,tableタグで見た目をを整形しておきます.

# ユーザの購買履歴の検索・表示
def showUserHistory(id):
    sql = "SELECT time,name,price FROM Histories INNER JOIN Items ON Histories.item_id=Items.id WHERE user_id='" + id + "'";
    records = cur.execute(sql)

    print("<h2>購買履歴</h2>")

    table = "<table border=`1``>"
    table += "<tr>"
    table += "<th>time</th>"
    table += "<th>name</th>"
    table += "<th>price</th>"
    table += "</tr>"

    for record in records:
        table += "<tr>"
        for column in record:
            table += "<td>"
            table += str(column)
            table += "</td>"
        table += "</tr>"    
    table += "</table>"
    print(table)        

この結果,下記のように表示されればOKです.

Image from Gyazo

参考書籍

愛知県名古屋市にある椙山女学園大学 文化情報学部 向研究室の公式サイトです. 専門は情報科学であり,人工知能やデータベースなどの技術要素を指導しています. この公式サイトでは,授業で使用している教材を公開すると共に, ベールに包まれた女子大教員のミステリアスな日常を4コマ漫画でお伝えしていきます. サイトに関するご意見やご質問はFacebookまたはTwitterでお問い合わせください.