Python 無料で独習 027 Pythonでデータベースを扱ってみよう

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

今回の講義はデータベースです。
また難しそうな内容ですね~。

冒頭SQLという単語が出てきます。
すこし聞いたことあるわぁ~ぐらいの
単語ですが、今西先生が解説してくれます。

SQLとはデータベースを操作するための言語
のようなものらしいです。
実際には このデータ追加してくださいとか
このデータが欲しいですとかなど
命令文を書いていく感じらしいです。

SQLを扱う言語はいろいろあって、

  • MySQL
  • MongoDB
  • OracleDB
  • SQLite3

などがあるみたいです。

その中でもこの講義では
SQLite3を使用して講義を進めていくそうです。
特徴としては一つのデータベースを一つのファイル
として扱うみたいです。
他の言語はどうなのか知らないので
現状ではふ~ん程度で理解しときます(笑)

とりあえずはGoogle Drive内のサンプルファイルを
使用するためにDriveにマウントします。
マウントする方法についてはこちらをご参照ください。
Python 無料で独習 020 ファイルの読み書き

で使用するファイルですが、今西先生はすでにアップロードして
あるファイルを使用しますが、ファイルはなんでもいいとの
ことですので私は前回の講義でも使用しました

california_housing_test.csv

をつかって講義を進めていきます。

まずは空のデータベースを定義します。
そしてsqlite3 のメゾット connect を使いデータベースにアクセスします。

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
<sqlite3.Connection at 0x7f3dd91ed650>

実際に実行して、Google Driveのファイルを更新して
見てみるとsample.dbというファイルが作成されています。

そして、dfに代入したデータフレームをデータベースに入れていきます。
df.to_sql(テーブル名,conn,if_exists='replace')
データベースのテーブルとはエクセルでいうところの
シートのようなものらしいです。
connはさきほどのコネクションしたファイルを意味します。
if_exists='replace'とはもし同じ名前のテーブルが存在したら置き換える
という意味らしいです。

df.to_sql('housing',conn,if_exists='replace')

このあと

c = conn.cursor()
というコードを書きますが今回の講義では深堀しないらしいです。
sqlの命令文を書く上で必要なものとだけ今は理解しておきます。

query = 'SELECT * FROM housing'
次のこのコードでは
SELECTでデーターを抽出
* アスタリスクで全ての
FROM housing  housingというテーブルから
query が命令です。
c.execute(query)
このコードで先ほど作った命令を実行(execute)します。
query = 'SELECT * FROM housing'
c.execute(query)

実際にデータを抽出したので、
そこから一行だけデータを取り出します。

c.fetchone()
(0, -122.05, 37.37, 27.0, 3885.0, 661.0, 1537.0, 606.0, 6.6085, 344700.0)
これで一行データを取り出すことができます。

c.fetchone()
とすると全てのデータをリスト形式で取り出すことができます。

ただ普通に表示するとみにくくなるので、
データごとに改行して見やすくする為に

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

とします。
これでキレイな形でデータを表示させることができます。

最後に

conn.close()

そしてデータベースを閉じます。

データベースに関しては
接続命令をして、
データを入力する命令をして、

最後にデータベースを閉じる命令をする感じみたいです。

すこしボヤっとするところはありますが
なんとか理解する事が出来ました。
今西先生、今日も有難うございます。
c.fetchone()
c.fetchall()
for row in c.execute(query):
  print(row)
conn.close()

コメント

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