今回は、編集ができないタプルの動作確認と、応用方法について記載していきたいと思います。
以前作成した、データベースをもとに、データを編集しようとした時にどうなるか?
また、応用としてネストについて簡単にまとめたいと思います。
目次
データベース内のデータを取り出してみる
さて、再度、以下の記事に記載されているデータを、DBから取り出してみたいと思います。
別の記事でも書かせていただいたのですが、execute関数で取得したデータは、タプルで出力することができます。
データを編集してみる(エラーになる)
# coding: utf-8
import sqlite3
from unittest import result
conn = sqlite3.connect('TEST_for.sqlite3')
cur = conn.cursor()
#DBに接続して、IDが3のシャツを取得する。
for shirts in cur.execute("select * from clothes where ID == 3"):
#シャツのコレクション種類を出力する(tuple)
print(type(shirts))
#該当のレコードを1レコード出力する(確認用)
print(shirts)
#確認用のレコード内にあるIDに対して、90を入れて更新してみる
shirts[0] = 90
conn.close()
【実行結果】
これはタプルがデータの変更を許さないことを示しています。
確かに、DBからデータを取得したのに、勝手にアプリに書き換えられてしまったら、大変ですよね。
他は、print(type(shirts))のPythonコードによって、<class ‘tuple’>が出力
print(shirts)のPythonコードによって、(3, ‘Blue_shirt’, 8500)が出力されていることが確認できました。
ネスト(入れ子)構造について解説
さて、もう一つ発展的な使い方をご紹介します。
それは、ネスト(入れ子構造)です!
今まではコレクションの中に対し、文字列や数値などのデータを格納し取得してきました。
コレクションは、それだけではなく、コレクションの中にコレクションを格納することができます。
それが、ネストと言われる使い方です。
実際に動作を確認してみましょう。
# coding: utf-8
import sqlite3
from unittest import result
conn = sqlite3.connect('TEST_for.sqlite3')
cur = conn.cursor()
#DBに接続して、すべてのシャツのデータを出力する。。
cur.execute("select * from clothes")
test_r = cur.fetchall()
print(test_r)
conn.close()
【実行結果】
少しみにくいかもしれませんが、リストとタプルが1行にまとまっていて、データが二重構造で管理されていることがわかります。
補足①(Excelのような表だと思えばわかりやすい)
今回の場合、表現したいことは以下のような表と一緒です。
縦横にデータが入っていて、列に対しては入るべき値は決まっている。
※金額の列には、シャツの名前は入らない。など。
1 | White_shirt | 10000 |
2 | Red_shirt | 15000 |
3 | Blue_shirt | 8500 |
4 | Yellow_shirt | 20000 |
5 | Green_shirt | 5000 |
一体何に利用されるか?と言うと、データ分析をする場面で利用されます。
プログラムが進んでいくと、こういった多重構造のデータ管理を行う場面が出てきますので、覚えておいていただくとよいとおもいます。
補足②(ネストされたリストに対して、参照をする)
ネストされたリストをどう利用するか?をご紹介します。
ネストされたリストの行を表示する。
実際に、データを取得してみたいと思います。
添字[2]の、Blue_shirtの行を取得すコードを、実行してみます。
# coding: utf-8
import sqlite3
from unittest import result
conn = sqlite3.connect('TEST_for.sqlite3')
cur = conn.cursor()
cur.execute("select * from clothes")
test_r = cur.fetchall()
###添字[2]の行を取得する。
###Blue_shirtの行が出力される。
print(test_r[2])
conn.close()
【実行結果】
Blue_shirtの行を取得することができました!
ネストされたリストうち一つのデータ(セル)を表示する。
上記の例は、なんとなくイメージがつきやすいと思います。
では、【Blue_shirt】の文字列だけ取得したい。
Blue_shirtの【PRICE】(金額)だけ取得したい、、、など
二次元リストの中から、一つのセルの値だけを取り出すとしたら?どうしたらよいでしょうか?
・
・
・
答えは、添字を二つ指定することにより、セルの住所を表現することができます。
【Pythonコード】
# coding: utf-8
import sqlite3
from unittest import result
conn = sqlite3.connect('TEST_for.sqlite3')
cur = conn.cursor()
cur.execute("select * from clothes")
test_r = cur.fetchall()
print(test_r)
print(test_r[2][1])
conn.close()
【実行結果】
【イメージ】
- Blue_shirtのIDなら:[2][0]で指定します。
- Blue_shirtの文字列なら:[2][1]で指定します。
- Blue_shirtの金額なら:[2][2]で指定します。
他にも、white_shirtのIDなら[0][0]などで、個別のセルの値を参照することができます。
EOF
タプルの動作から、ネスト構造についてご紹介しました。
拙い説明で申し訳ないのですが、コレクションの応用編ということでシェアさせてください。
そして、私の理解が間違えていたらどなたか教えてほしい、、、です。
本日も、一緒に学習してくださって、ありがとうございました!
また、次回!
追伸:これからPythonを学ぶなら
これからPythonを学びたい!業務に活かせるように学習したい!という方ならば、まずはUdemyで学習を始めることをお勧めします。
Udemyでは、数多くの講師陣がITの知識やスキルアップのための解説動画を提供していて、現場でも役立つ知識が多数存在します。
特に、流行りもあるのだと思いますがPythonやAWSの講座は数が多く品質が高いものが多いです。
手前味噌ながら以下の記事で、主に初学者の方向けのお勧め講座のレビューをしていますので、ご参考にしていただけますと幸甚です。
編集できない。と言うことを確認してみたいと思います。