はじめに
データベースと聞くと難しそう?と思いませんか?これまでSQLiteにデータベースやテーブルを作成する方法を紹介してきましたが、pandasで処理したデータフレームをそのままSQLiteに渡すこともできます。これだとデータベースのハードルもぐんとさがるのではないでしょうか?今回はPythonとSQLiteのデータのやりとりについて基本から解説します。
▶ SQLからデータを読み込むときは以下の記事を参考にしてください。
▶ あらかじめSQLiteにデータベース、テーブルを作成する場合は以下の記事をどうぞ
環境
- Windows10
- Python 3.9.7
- pandas 1.5.0
- numpy: 1.23.3
- matplotlib: 3.6.1
pandasのデータフレームをSQLiteに渡す
pandasのデータフレームをSQLiteに渡すのは驚くほど簡単です。SQLiteはPythonに同梱されているので設定も不要です。先にぱぱった、SQLiteにデータフレームを渡してみてしまいましょう。
サンプルデータの準備
# ライブラリのインポート
import pandas as pd
import seaborn as sns
# サンプルデータ
df = sns.load_dataset('tips')
df.head()
ニューヨークのタクシー運賃に関するデータです。今回はこのデータフレームをSQLiteに格納してみましょう。
データフレームをSQLiteに渡す
データフレームをcsvに書き出すときに「pd.to_csv」とするのと同様にSQLに渡すときには「pd.to_sql」とするのが基本です。ただデータベースにアクセスする際には、
- データベースへ接続する
- 処理をする(データを渡したり受け取ったり)
- 接続を終了する
という手続きが必要となります。そのため終了処理を忘れることのないように、ファイル処理でよく利用するwith構文を使うことが多いです。with構文を使うと確実に終了処理をおこなってくれます。
with構文を使った書式を確認しておきましょう。
簡単ですね。to_sqlの引数にはtable(テーブル名)、conn(コネクション)を指定します。これが基本ですが、他にもよく利用する引数があるのでまとめておきましょう。
引数 | 説明 |
con | コネクションを指定 |
name | テーブル名を指定 |
index | データフレームのインデックスをテーブルに追加するかどうかを指定 (True/False) |
if_exists | テーブルが存在した場合の対応 replace:既存テーブルを削除して新規に作成 append:新しい値を追記 |
では、さっそくやってみましょう。
# ライブラリのインポート
import sqlite3
# データベース名とテーブル名
db_name = 'datasets.db'
table_name = 'tips'
# SQLiteに書き込む
with sqlite3.connect(db_name) as conn:
df.to_sql(table_name, conn)
4~6行目はあらかじめデータベース名とテーブル名を変数に入れているだけなので、実質9~10行目の2行でPythonからSQLiteにデータを渡すことができます。簡単ですね!このコードで「datasets.db」というファイルができています。これをSQLiteで開いてみてみましょう。
このファイルをダブルクリックして開くとSQLiteが立ち上がります。
はじめは「データベース構造」が選択された状態で立ち上がります。テーブルの下のセクションを開くとフィールドとそのデータ型などを確認することができます。
データを確認するには「データベース構造」の隣の「データ閲覧」のタブを選択します。
ちなみにデータベース内に複数のテーブルがある場合は「テーブル」の箇所のプルダウンを表示さえ手選択することができます。SQLiteでのデータの閲覧・SQL実行などはまた今度扱うことにしましょう。次に、SQLiteに保管されたデータをPythonから取り出す方法も見ておきましょう。
SQLiteからデータを取り出す
こちらもcsvファイルを読み込むときに「pd.read_csv」とするのと同様に、SQLからデータを読み込むときには「pd.read_sql」とするのが基本です。データを渡す時と同様に、
- データベースへ接続する
- 処理をする(データを渡したり受け取ったり)
- 接続を終了する
という手続きが必要なので、with構文を使います。SQLiteからデータを読み込む際の書式の家訓をしておきましょう。
read_sqlの引数にはsql(sql文)、conn(コネクション)を指定します。早速やってみましょう。
# ライブラリのインポート
import sqlite3
# SQL文
db_name = 'datasets.db'
table_name = 'tips'
sql = '''
select *
from tips
'''
# SWLiteに書き込む
with sqlite3.connect(db_name) as conn:
df_from_sql = pd.read_sql(sql, conn)
9~12行目であらかじめSQL文を書いて変数sqlに入れています。これをwith構文の中の「read_sql」で渡しています。こちらも慣れれば簡単そうですね。
まとめ
今回はPythonとSQLiteのデータのやり取りを扱いました。Python側ではpandasを使うことで、データの渡す場合は「pd.to_sql」、データを取り出す場合は「pd.read_sql」とすることができます。データベースとのやり取りでは、①データベストの接続、②処理、③データベースとの接続の切断、の一覧の手続きが必要であるため、with構文で書くことが多いです。
コメント