pythonの学習にgoogle colaboratoryはとっても便利だが、下の画像のようにSQLを触ることもわりとお手軽にできる。

2023/3/3:よりモダンな方法に情報をアップデートした記事を書きました。よろしければこちらのほうをご覧ください。
1. 諸々準備
!pip install ipython-sql==0.3.9
# サンプルデータのダウンロード・解凍
!wget https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip
!unzip chinook.zip
ipython-sqlという、notebookのマジックコマンドでSQLを実行できるようにするためのライブラリを用いる(https://github.com/catherinedevlin/ipython-sql)。
%load_ext sql
# DBに接続(chinookは↑でダウンロードしたもの)
%sql sqlite:///chinook.db
# table一覧を出力
%sql select name from sqlite_master where type='table';
エクステンションを読み込んで、%sql
を付けた行でSQLを実行できるようにする。まずDBに接続するのだが、今回用いるSQLiteは一つのファイルで管理されてるので、それを指定。
table一覧を出力してる。ちなみに音楽系のデータで、アルバムとかアーティストとかのテーブルがあるっぽい。
2. クエリの実行
%%sql
SELECT
*
FROM
albums
LIMIT 5;
%%sql
コマンドを頭に付けたセルではSQLを実行できる(これが冒頭の写真)。なお、クエリの結果は _
に格納されており、 print(_)
で下のような整形された表が出力される。

3. pandasへの変換
%%sql result <<
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId
LIMIT 10;
%%sql variable_name <<
から始めると、結果を変数に格納できる。 それをpandas.DataFrameに変換するには、 .DataFrame()
とするだけ。
df = result.DataFrame()
display(df)

4. csvからテーブルを作成
pandas経由でsqlite3を使って作成する(のが一番お手軽かと思う)。
# csvのdownload
!wget https://raw.githubusercontent.com/mcnakhaee/palmerpenguins/master/palmerpenguins/data/penguins.csv
import sqlite3
import pandas as pd
df = pd.read_csv('penguins.csv')
with sqlite3.connect('penguins.db') as conn:
df.to_sql('palmer', con=conn)
sqlite3.connect(DB_path)
でデータベースに接続する。DBが存在すればそれに接続して、しなければ新しいDBが作成される。csvをテーブルにするにはpandasの DataFrame.to_sql(table_name, connection)
が使える。
%sql sqlite:///penguins.db
1.と同じように作成したDBに接続すれば、さっきと同様にクエリ書いて実行できる。
%%sql
SELECT
*
FROM
palmer
WHERE
body_mass_g > 3799
LIMIT 3;
最後に
コードはコチラに置いてるので、そのままcolab立ち上げて触ってみたい方はぜひどうぞ!
ipython-sqlは他にも色々機能あって面白そうでした。実務で使うかはあれですが、練習用には割とアリじゃないでしょうか。