はじめに
こちらのコラムでデータベースを紹介しました。理屈だけでなく実際に扱うことでより深く理解できると思います。ほとんどのSNS(YoutubeやX)は今回紹介するデータベースが構築され、管理されています。データベースの構築、管理は様々なプログラミング言語が使われますが、ここではpythonの辞書型を使ってデータベースの解説を行いたいと思います。ここで学んだことは私が開発したこちらにも応用されていますので、参考にしてください。
解説
やりたいことを確認
まずは、データベースでやりたいことを図で示します。
表のようにデータベースがすでに構築されており、インプットとして、Bさんのお気に入りしている人を出力したいとします。上図の右側がコードにする流れです。これをコードに起こすと下のようになります。
コード
Database = {'ユーザ名' : ['A', 'B', 'C', 'D'],
'パスワード' : ['AAA', 'BBB', 'CCC', 'DDD'],
'登録チャンネル' : ['B', 'C', 'D', 'A'],
'お気に入り' : ['C', 'D', 'A', 'B']}
def userdata(number):
user = Database['ユーザ名'][number]
password = Database['パスワード'][number]
registar = Database['登録チャンネル'][number]
favorite = Database['お気に入り'][number]
user_dict = {user:{'パスワード' : password, '登録チャンネル' : registar, 'お気に入り' : favorite}}
return user_dict
user_to_number = {'A' : 0, 'B' : 1, 'C' : 2, 'D' : 3}
Who = 'B'
What = 'お気に入り'
search = userdata(user_to_number[Who])[Who][What]
print(Who + "さんの" + What + "は 「" + search + "」 です。")
データベースの構築
最初の4行が辞書型データベースになります。pythonでの辞書型データベースの書き方は{ }で内容を囲みます。中身はキーと値で構成されています。ユーザ名やパスワードといった表でいうところの列名がキーを呼びます。そのキーに対応した値がデータになります。キーと値を:でつなぐことでデータベースが作られます。
データベースの参照
この辞書型データベースから値を取り出すためにはキーを指定することで取得することができます。指定方法は辞書となった変数の後に[ ]を書き、中身にキーを記入することで、そのキーに対応した値を取り出すことができます。例えば、Databaseという辞書型の変数からユーザ名と取り出したい場合
Database[‘ユーザ名’]
と指定して取り出すことができます。今回の場合、出力結果は
[‘A’, ‘B’, ‘C’, ‘D’]
と出力されます。ここからBさんだけ取り出したい場合、リストから取り出す方法と同じで[1]をDatabase[‘ユーザ名’]の後につけます。ユーザ名以外にもパスワードや登録チャンネルなど指定することでBさんの情報を取得することができます。
工夫
しかし、これだとBさんしか取得できないため、Databaseを少し変更して、Aさんの情報はこれこれ、Bさんの情報はこれこれという風に変えたいと思います。それが5~12行目の関数になります。使い方はこちらを参考してください。この関数のインプットはAさん、Bさん、Cさん、Dさんを区別するための番号です。この番号はユーザ名以外でも共通なのでほかのキーでも使うことができます。
Aさん、Bさん、Cさん、Dさんを番号で区別するために新たな辞書型データベースを作成します。これでAさんなら0、Bさんなら1という風にできます。
これでデータベースからどんな情報を取得することができるようになりました。では、本来の目的である「Bさんのお気に入りしている人」を取得してみたいと思います。
では、誰が、何を取得するという意味でWhoとWhatに「Bさん」と「お気に入りしている人」にそれぞれ代入します。
あとはWhoとWhatをデータベースにアクセスすると「D」と出力されます。
最後にきれいに出力されるようにして完成です。
今回はpythonで辞書型のデータベースを解説しました。YoutubeやXなどSNSに使われているようなデータベースがどのように使われているか簡単なコードで解説しました。普段ただユーザ名やパスワードを入力しているだけだと思いますが、裏ではこういったことが行われていると理解いただければと思います。また、私もこれを使ってwebアプリを作成しています。ぜひこちらもよろしくお願いします。
コメント