Python 無料で独習 028 PythonでCRUD操作を行ってみよう 

Python
この記事は約6分で読めます。

今回の講義は前回の講義の続きだそうです。
前回の講義 027 Pythonでデータベースを扱ってみよう

タイトルにあるCRUD操作とは

  • Create 作成
  • Read 読み込み
  • Update 更新
  • Delete 削除

の頭文字だそうです。
これらの操作をSQLiteを使ってSQL文でどうやって
命令していくかを学びます。

とりあえずデータベースを作るところまでは
前回の講義でやっていますので、そのままコードを使います。

import sqlite3
import pandas as pd
df = pd.read_csv('/content/sample_data/california_housing_test.csv')
db_name = 'sample.db'
conn = sqlite3.connect(db_name)
conn
df.to_sql('housing',conn,if_exists='replace')
c = conn.cursor()
query = 'SELECT * FROM housing'
c.execute(query)
for row in c.execute(query):
  print(row)

とここまでで
新規の空データベースを作成して
コネクト(接続)して
csvファイルをデータベースへ新しいテーブルとして入れて
実際にデータが入っているか確認する為に
プリント文で一行づつ出力
そしてデータベースをクローズするとこまでやりました。

CREATE

まずはCREATEからです。
SQL文では大文字で書くように言われますが
小文字でも問題ないみたいなので今回今西先生は
小文字で命令文を書いています。

前回全ての行のデータをとるという意味で
*(アスタリスク)を使いました。
count():何かを集計する時の命令文
の要素にを入れることによって行数を集計できます。

query = 'select count(*) from housing'
c.execute(query)
c.fetchone()

(3000,)

現在のデータの行数を把握した状態で
データを一行追加して、再度行数をカウントすることに
よってちゃんとデータが追加されたかを確認します。

今回作ったデータベース housing
の longitude  atitude   の値にそれぞれ
-122.05 と 37.37 の値を入れて新しい行を作成します。

query_create = '''
insert into housing (longitude,latitude)
values(-122.05,37.37	)
'''
c.execute(query_create)

で、先ほど実行した行数を数えるクエリーを実行して
c.fetchone()で出力結果を表示します。

c.execute(query)
c.fetchone()

(3001,)

無事 3,000  から3,001 に行数が増えているので
Create成功です。
実際にどのようにデータベースに入っているかをみるために
新たな命令文をつくります。
select文でテーブルの全てのデータを選択し、
limit で最大表示する行数を指定。
offset で何行目から表示スタートするかを指定します。

queryを作成したところで、
一行ごとにprintして見やすくするために
for文をつかって繰り返し処理をします。

query_select = '''
select * from housing
limit 10
offset 2999
'''

for row in c.execute(query_select):
  print(row)

(2999, -119.63, 34.42, 42.0, 1765.0, 263.0, 753.0, 260.0, 8.5608, 500001.0)
(None, -122.05, 37.37, None, None, None, None, None, None, None)

ちゃんとlongitude  atitudeの二つの項目に数値が入力されてます。
なんかちゃんと出力されると嬉しいですね!

READ

つぎはREADです。
レコードの参照はCREATEのところでやっあ
selectなどもそうらしいです。
データの中からlongitudeの列を出力します。
全部にすると3000個あるので今回は
fetchall ではなくfetchoneで一個だけ出力します。

query = 'select longitude from housing'
c.execute(query)
print(c.fetchall())
(-122.05,)

無事出力することができました。
このsql文ですが、今西先生いわく覚える必要はなくて
命令文をつくる際にその都度ネットで調べれば大丈夫だそうです。
select文で条件式を入れることも可能です。
whereで条件をいれます。

query = '''
select longitude from housing
where longitude >= -115
'''
c.execute(query)
c.fetchall()
[(-114.98,), (-114.61,), (-114.55,), (-114.49,), (-114.62,)]

UPDATE

update文をつかって一括処理のようなものをします。
housing のatitudeを全て2にします。

query = '''
update housing set latitude = 2
where longitude >= -115
'''
c.execute(query)
query = '''
select longitude,latitude from housing
where longitude >= -115
'''
c.execute(query)
c.fetchall()
[(-114.98, 2.0),
 (-114.61, 2.0),
 (-114.55, 2.0),
 (-114.49, 2.0),
 (-114.62, 2.0)]

元のデータ数が多いので条件式を入れて抽出していますが、
latitudeの項目が全て2.0になっているのがわかります。

DELETE

最後にデリートです。
まずは現在の行数をカウント。そして
前回のアップデートで
longitude >= -115
のデータのlatitudeを全て2でアップデートしたので
latitude=2以外のデータを全て削除してみます。
最後に削除後のデータ数をカウントします。

query='select count(*) from housing'
c.execute(query)
c.fetchone()
(3001,)

query_delete='''
delete from housing
where latitude !=2
'''

c.execute(query_delete)
c.execute(query)
c.fetchone()
(5,)

見事データの削除も成功しました。
まだまだ簡単な操作ではありますが、データベースの基本みたいなものを
学ぶことができました。
今西先生、有難うございました。

コメント

タイトルとURLをコピーしました