Python

Python初学者向け:pandas⇔SQLiteのデータのやりとりを基本から解説

スポンサーリンク

 

この記事はこんな方におススメです
  • Pythonを始めたばかりで基本から学びたい方
  • Pythonの基本的な部分を速習してまずは全体像を把握しておきたい方

はじめに

データベースと聞くと難しそう?と思いませんか?これまで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構文を使った書式を確認しておきましょう。

with sqlite3.connect(db_name) as conn
  df.to_sql(table_name, conn)

簡単ですね。to_sqlの引数にはtable(テーブル名)、conn(コネクション)を指定します。これが基本ですが、他にもよく利用する引数があるのでまとめておきましょう。

引数説明
conコネクションを指定
nameテーブル名を指定
indexデータフレームのインデックスをテーブルに追加するかどうかを指定
(True/False)
if_existsテーブルが存在した場合の対応
replace:既存テーブルを削除して新規に作成
append:新しい値を追記
to_sqlのオプション

では、さっそくやってみましょう。

# ライブラリのインポート
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が立ち上がる

はじめは「データベース構造」が選択された状態で立ち上がります。テーブルの下のセクションを開くとフィールドとそのデータ型などを確認することができます。

データを確認するには「データベース構造」の隣の「データ閲覧」のタブを選択します。

SQLiteでデータの確認

ちなみにデータベース内に複数のテーブルがある場合は「テーブル」の箇所のプルダウンを表示さえ手選択することができます。SQLiteでのデータの閲覧・SQL実行などはまた今度扱うことにしましょう。次に、SQLiteに保管されたデータをPythonから取り出す方法も見ておきましょう。

SQLiteからデータを取り出す

こちらもcsvファイルを読み込むときに「pd.read_csv」とするのと同様に、SQLからデータを読み込むときには「pd.read_sql」とするのが基本です。データを渡す時と同様に、

  • データベースへ接続する
  • 処理をする(データを渡したり受け取ったり)
  • 接続を終了する

という手続きが必要なので、with構文を使います。SQLiteからデータを読み込む際の書式の家訓をしておきましょう。

with sqlite3.connect(db_name) as conn
  pd.read_sql(sql, conn)

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)
SQLiteから読み込んだデータ

9~12行目であらかじめSQL文を書いて変数sqlに入れています。これをwith構文の中の「read_sql」で渡しています。こちらも慣れれば簡単そうですね。

スポンサーリンク

まとめ

今回はPythonとSQLiteのデータのやり取りを扱いました。Python側ではpandasを使うことで、データの渡す場合は「pd.to_sql」、データを取り出す場合は「pd.read_sql」とすることができます。データベースとのやり取りでは、①データベストの接続、②処理、③データベースとの接続の切断、の一覧の手続きが必要であるため、with構文で書くことが多いです。

コメント

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