Contents
Pythonからデータベースを操作する
今回はPythonのプログラム上からデータベース(DB)を操作する方法を解説していきます。基本的にデータベースは他のプログラミング言語の上からデータベースにアクセスするのが一般的です。データベースを操作するプログラミング言語であるSOLの基本的な使い方は↓で書いています。
→SQLの基本的な構文
例えば自分の場合だと仮想通貨の価格を定期的に取得したそれをデータベースに保存するという処理をするためにPythonのプログラム上でデータベースを操作しています。
他にもDjangoやFlaskなどでウェブアプリケーションを構築する際にもデータベースは必須になるので、Pythonに限らず他のプログラミング言語でWebアプリケーションなどを作る場合でもSQLによるデータベースの操作スキルは必須なので、データベース(DB)の理解はエンジニアになる上で絶対に必要です。
データベースを操作するプログラミング言語はいくつか存在しますが、基本的に「SQL」・「Oracle」というプログラミング言語で操作します。そしてPythonなどの他のプログラミング言語で書かれたコードからデータベース(DB)を操作する場合は、そのコード上でSQLのコマンドを記述し、そこからデータベース(DB)を操作するのが一般的です。
そして、Pythonの場合であればSQLの簡易版であるsqliteをPython上から実行できるsqlite3というライブラリを使うことで。python上でデータベースを操作することができます。
SQLite(エスキューライト)は、ファイルベースのデータベースエンジンでファイルだけあれば動作しますが、データベースを丸ごとロックすることしかできないので、複数人が同時接続するとパフォーマンスが落ちてしまいます。加えて発行できるSQLも他のデータベースエンジンに比べて制限があり、複雑だったり大規模なデータベースが必要な場合なケースには向いていないわけですが、SQLはインストール不要ですぐに使えるというメリットはあるので、小さなwebサービスを立ち上げる際なんかはサクッと使えるので超便利です
sqliteでPythonからデータベースを操作する
まずはコマンドライン(アナコンダプロンプト)でsqliteをインストールします。Anaconda環境だとデフォルトで入っているかもしれませんので、まず「JupyterNotebook」かなんかで「import sqlite」を実行して確認してみてください。
#sqliteのインストール $pip install sqlite
インストールが終わったらインポートしてみます。
##sqlite3をインポートする import sqlite
データベースに接続して.dbファイルとデータテーブルの作成する
基本的にデータベース(DB)の仕組みはまず大元の.dbを作り、その中にデータの種類ごとにテーブルを作成し、そこにデータを格納していくという形になるので、まずはデータを格納する大元である.dbファイルを作ります。自分の場合はユーザー名のディレクトリに新しく「python_sqlite3」というフォルダを新規に作ってそこで作業しています。
パスはこんな↓のような感じです。
C:\Users\ユーザー名\python_sqlite3
まずこのフォルダの中に「sample.py」と「sample.db」を作ります。pyファイルを「sqlite3.py」にすると「AttributeError: module ‘sqlite3’ has no attribute ‘connect’」のエラーが出るので止めましょう。
そしてその中にテーブルを作っていくわけですが、基本としてはテーブルの数が増えると処理速度が遅くなるので、テーブルはなるべく少なめにした方がいいでしょう。プログラミング全般に言えることですが、シンプルかつ分かりやすくを意識していきましょう。
またsqlite3でのデータベースの操作はpyファイルをコマンドプロンプト(アナコンダプロンプト)で実行した方がいいと思います。というのも、jupyternotebookやSpyderなどのAnaconda経由で操作すると、コマンドがちゃんとデータベースに反映されていないことがあります。(Win10 64Bit)
<sqlite3.pyの中身>
import sqlite3 # データベースファイルのパス dbpath = 'sample.db' # データベースの作成・接続とカーソル生成 c = sqlite3.connect(dbpath) cur = c.cursor() # データテーブルを作成する cur.execute("create table sample_table(id integer primarykey auto_increment , name text)")
2行目のcはconnectionのcです。人によってはconnectionとしている人もいます。cの方が後々コードの文字数が減ります。sqlite3の使い方はDBのパスを指定して接続し、そこからcur.execute()で引数にデータベースのコマンドを入れて実行という流れになっています。データベースのコマンドはダブルクオテーション(””)で囲います。
今回はsample_tableというデータテーブルを作ります。テーブルの作成はCREAT文で出来ます。テーブルとdbファイルは別物で、sample.dbというデータベースファイルの中にsample_tableというデータテーブルを作り、そこにデータを挿入していくイメージです。
テーブルの中身は無難にIDとNameにします。IDは数字型で同じものがあったら困るので、引数にintegerとprimarykeyを指定しておきます。データ型とプライマリーキーの話はsqliteではなくSQLの仕様の話です。
これをアナコンダプロンプト上から以下のコマンドで実行します。実行する前にcdでディレクトリを変更しておいてください。ディレクトリが間違っていると「 No such file or directory」というエラーになります。
cd python_sqlite3 C:\Users\(自分のユーザー名)\python_sqlite3>python sample.py
これで、データベースとテーブルができたはずなので、中身を確認していきます。
#データベースファイルを起動してアクセスする $sqlite3 sample.db
こんな感じで
SQLite version 3.24.0 2018-06-04 19:24:41
Enter “.help” for usage hints.
sqlite>
とでていたら成功です。これで今はsample.dbにアクセスしている状態になっているので、次はsample.dbの中に作成されているはずのデータテーブルを確認してみます。dbファイルの中にあるデータテーブルの確認は「.tables」で出来ます。
#テーブルの確認する sqlite> .tables
実行して以下のようになっていれば成功です。
これでsample.dbの中にデータテーブル(sample_table)が作成されていることを確認できたので、次はINSERT文を使って、データテーブルにデータを追加していきます。
INSERT文でテーブルにデータを追加する
次は先ほど作成したsample.dbの中にあるsample_tableの中にINSERT文でデータを追加したいと思います。INSERT文での追加は以下のように行います。
コマンドラインから追加する場合
#テーブルにデータを追加する sqlite> insert into sample_table(id,name) values(1,'bitcoin');
sqliteから追加する場合
cur.execute("insert into sample_table(id,name) values(1,'bitcoin');")
この処理でsample_tableの中に1とBitcoinというデータが追加されたはずなので中身を確認します。
テーブルに追加したデータを確認する
①sqliteとfor文を使って確認する場合
table_data = cur.execute('select * from sample_table;') for row_data in table_data: print(row_data)
デフォルトはこれですが、データ量が多いととんでもない行数がprintされてしまうので、その場合は②の方法でデータフレームとして確認するのが個人的にはおすすめです
②pandasを使ってデータフレームとして確認する場合
pandasのpd.read_sql()を使うことでテーブルをデータフレームとして確認することができます
import pandas as pd df_from_sql = pd.read_sql('select * from sample_table', c) print(df_from_sql.head())
③コマンドラインから確認する場合
最後はコマンドラインからデータベースを開いてクエリを直接叩く方法です
# sample_tableの中身を確認する $ sqlite3 sample.db $ select * from sample_table;
実行すると以下が返されます。
sqlite> select * from sample_table;
1|bitcoin
コマンドプロンプト上でsqlite3を終了する場合は以下のコマンドで実行できます。
#sqlite3を終了する sqlite> .exit
終わり
以上がsqlite3からPython上からのデータベースの操作方法になります。SQLの文法については「SQLの書き方のツボとコツがゼッタイにわかるドリル本」という本が初心者向けで非常に分かりやすかったので紹介しておきます。
次はここに実際のビットコインの価格データをAPIを通して取得して、その値をデータベースに保存する処理を行っていきたいと思います。
コメント
[…] 参照記事:Pythonでデータベース(DB)を作成・操作できる「sqlite3」の使い方を分かりやすく解説する […]
[…] 使い方は過去記事参照:Pythonでデータベース(DB)を作成・操作できる「sqlite3」の使い方を分かりやすく解説する […]