見出し画像

[Python]指定した条件でデータを出力してみる。

1.何をするのか

前回は複数回に渡るデータの追加を行い、追加されたどうか直接対話モードでデータを確認していました。今回は対話モードに入らず、データベースに登録されている情報を指定した条件でそのままプログラム上で出力させます。

2.コード

import sqlite3
import os
import sys

PATH = os.path.join(os.getcwd(), "hoge.db")
connect = sqlite3.connect(PATH)
cursor = connect.cursor()

"""
検索する条件を指定します。
field_index:データベースのカラム名
field_value:カラム名に則った値
"""

try:
    field_index = int(input("何で検索するか指定ください[0:id|1:著者名|2:本のタイトル]:"))
    field_value = input("検索したい値を指定してください:")
except ValueError:
    print("\n値に不正な入力がありました。")
    print("正しい値を入力してください")
    #プログラムを終了させる
    sys.exit()

"""
入力したfield_indexの値から
実際にデータベースに登録されている
カラム名に変換します。
"""    

if field_index == 0:
    field_name = "id"
elif field_index == 1:
    field_name = "author"
elif field_index == 2:
    field_name =  "book_name"

"""情報を抽出するSQL
今回はどのカラムの何の値かでDBを検索します。
formatメソッドで先程指定した変数をSQLに埋め込みます
 例)
filed_index => 0を入力
filed_name => id
filed_value => 1
から
SELECT * FROM book_list WHERE id='1';
"""
search_all_sql = "SELECT * FROM book_list WHERE {0}='{1}'".format(field_name, field_value)

#SQLを実行
cursor.execute(search_all_sql)
#実行結果の全てをリストで返す。
result = cursor.fetchall()

#該当するデータの有無を要素数で判定
dt_exist_flag = 1 if len(result) != 0 else 0

if dt_exist_flag:
    for row in result:
        print(row[0], row[1],row[2])
else:
    print("\n該当するデータは見つかりませんでした。")

3.実行結果

#idで検索する場合
何で検索するか指定ください[0:id|1:著者名|2:本のタイトル]:0
検索したい値を指定してください:3
3 甘利俊一 脳・心・人工知能

#著者名で検索する場合
何で検索するか指定ください[0:id|1:著者名|2:本のタイトル]:1
検索したい値を指定してください:渋沢栄一
2 渋沢栄一 論語と算盤

#該当するデータが存在しない場合
何で検索するか指定ください[0:id|1:著者名|2:本のタイトル]:1
検索したい値を指定してください:夏目漱石

該当するデータは見つかりませんでした。




この記事が気に入ったらサポートをしてみませんか?