Search

検索したいワードを入力してください

Pythonでデータベースを使うには?接続とSQLの使い方

初回公開日:2019年02月01日

更新日:2020年03月13日

記載されている内容は2019年02月01日時点のものです。現在の情報と異なる可能性がありますので、ご了承ください。

また、記事に記載されている情報は自己責任でご活用いただき、本記事の内容に関する事項については、専門家等に相談するようにしてください。

Pythonでデータベースを扱うための方法についてお伝えします。データベースを扱うための言語「SQL」についても、その使い方の基本をお伝えします。ここでは、データベースとして「SQLite」を用いて解説していきますが、最後に「MySQL」についてもふれます。

SQLとは

SQLは、リレーショナルデータベース管理システム(RDBMS)内のデータを操作・制御することができるデータベース言語で、「えす・きゅー・える」と呼ぶことが多いです。

RDBMSを用いると、1万人分の顧客情報(名前、郵便番号、住所など)、100万個の商品情報(商品名、価格、仕入先など)といった大量のデータを効率よく管理することができます。SQLを使うと、そのような大量のデータに対して、「東京都に住んでいる顧客の名前だけ取得したい」といった処理を簡単に行うことができるようになります。

SQLは国際標準のデータベース言語なので、これを使えば、様々な種類があるRDBMS(例えば、MySQL、SQLite、Oracle Database)を同じように扱うことができるようになります。ここでは、MySQLとSQLiteを対象にして、SQLの使い方をお伝えしていきます。

MySQL

MySQLは、オープンソースとして公開されているRDBMSの一つで、「まい・えす・きゅー・える」と呼びます。世界で特によく使われているデータベースの一つと言われています。

利用者がとても多いため、わからないことがあっても、インターネットで検索すればほとんどの問題は解決できるでしょう。

MySQLを利用するには、はじめにインストールしたり、接続する方法に慣れたりする必要があります。

SQLite

SQLiteも、オープンソースとして公開されているRDBMSの一つで、「えす・きゅー・らいと」と呼ぶことが多いです。簡単に使い始めることができるのが特徴なので、本書ではSQLiteを用いて、詳しい使い方をお伝えしていきます。

Python3でSQLiteを使う

Pythonには、Pythonをインストールするだけで最初から使える標準ライブラリと、別途インストールが必要なライブラリの2種類があります。Python3でSQLiteを使うには、標準ライブラリをインポートするだけで可能です。

なお、以下に記すサンプルコードは、「Python 3.6.5」「macOS 10.13.6」で動作確認しています。

ライブラリを呼び出す

Python3でSQLiteを利用するため、sqlite3という名前の標準ライブラリをインポートします。
>>> import sqlite3

これだけで、SQLiteをPython3から利用する準備が整いました。

データベースに接続する

カーソルの作成

データベースを操作するときには、「カーソル」と呼ばれるものを使って行います。Python3でカーソルを作成するには、「カーソル名 = コネクション名.cursor()」とします。
# コネクション"conn"に対して、カーソル"cur"を作成する場合
>>> cur = conn.cursor()

以降のデータベースに対する操作は、ここで作成したカーソル"cur"を使って行います。

テーブルを作成

データベースは、複数のテーブルを持つことができます。テーブルひとつひとつが、「顧客情報」を保存する表や、「商品情報」を保存する表に相当します。

エクセルで例えるならば、「エクセルファイル自体」が「データベース」に、エクセルファイル内の「シート」が「テーブル」に相当します。

Python3でテーブルを作成するには、「カーソル名.execute("テーブル作成のためのSQL")」とします。「テーブル作成のためのSQL」は、「CREATE TABLE テーブル名 (カラム名1 データ型1, カラム名2 データ型2, ...)」と書きます。例として、商品情報を保存するテーブルを考えましょう。

商品情報テーブル(products)

  • 商品名カラム(name):文字列
  • 価格カラム(price):整数
  • 個数カラム(quantity):整数

テーブルにデータを追加する

Python3でテーブルにデータを追加するには、「カーソル名.execute("データ追加のためのSQL")」とします。「データ追加のためのSQL」は、「INSERT INTO テーブル名 VALUES (値1, 値2, ...)」とします。

「商品名:"おにぎり"、価格:100、個数:3」のデータを商品情報テーブルに追加する場合、「データ追加のためのSQL」は以下のようになります。

INSERT INTO products VALUES ('おにぎり', 100, 3)

したがって、以下を実行することで、おにぎりのデータを商品情報テーブルに追加することができます。

>>> cur.execute("INSERT INTO products VALUES ('おにぎり', 100, 3)")

また、以下のように書くこともできます。

>>> item = ("おにぎり", 100, 3)
>>> cur.execute("INSERT INTO products VALUES (?, ?, ?)", item)

複数のデータを一気に追加したいときは、以下のように書きます。

>>> items = [("おにぎり", 100, 3), ("パン", 150, 2), ("ラーメン", 400, 10)]
>>> cur.executemany("INSERT INTO products VALUES (?, ?, ?)", items)

コミットしてデータベースに反映する

データの追加・変更・削除などを行ったときには、「コミット」と呼ばれる操作を行う必要があります。Python3でコミットを行うには、「コネクション名.commit()」とします。

コミットを行わないと、データベースに変更内容が保存されませんので注意しましょう。なお、データを変更するたびにコミットする必要はなく、最後に一度コミットするだけで大丈夫です。

# 3つの商品を追加したあと、コミットを行う場合
>>> cur.execute("INSERT INTO products VALUES ('おにぎり', 100, 3)")
>>> cur.execute("INSERT INTO products VALUES ('パン', 150, 2)")
>>> cur.execute("INSERT INTO products VALUES ('ラーメン', 400, 10)")
>>> conn.commit()

データを呼び出す

Python3でデータを呼び出すには、「カーソル名.execute("データ呼び出しのためのSQL")」とします。「データ呼び出しのためのSQL」は、「SELECT 呼び出したいカラム名 FROM テーブル名 WHERE 呼び出す条件」とします。SQLの例を以下に記します。

# 5個以上存在する商品の商品名カラムと価格カラムの値を表示するSQL
SELECT name, price FROM products WHERE quantity>=5

# 5個以上存在する商品の全カラムの値を表示するSQL
SELECT * FROM products WHERE quantity>=5

# おにぎりの全カラムの値を表示するSQL
SELECT * FROM products WHERE name='おにぎり'

# 全商品の全カラムの値を表示するSQL
SELECT * FROM products

では、実際にPythonで商品情報テーブル内のデータを呼び出してみましょう。商品情報テーブルには、あらかじめ以下のようなデータを入れておきます。

商品名(name)価格(price)個数(quantity)
おにぎり1003
パン1502
ラーメン40010
サンドイッチ2005
焼きそば2507


# 5個以上存在する商品の商品名カラムと価格カラムの値を表示する場合
# cur.fetchone()を実行するたびに、データが1つずつ表示されます
>>> cur.execute("SELECT name, price FROM products WHERE quantity>=5")
>>> cur.fetchone()
('ラーメン', 400)
>>> cur.fetchone()
('サンドイッチ', 200)
>>> cur.fetchone()
('焼きそば', 250)

データの削除

Python3でデータを削除するには、「カーソル名.execute("データ削除のためのSQL")」とします。「データ削除のためのSQL」は、「DELETE FROM テーブル名 WHERE 削除の条件」とします。SQLの例を以下に記します。

# 5個以上存在する商品データを削除する場合
DELETE FROM products WHERE quantity>=5

# 全データを削除する場合
DELETE FROM products

実際にPythonでデータの削除を行ってみましょう。最後にコミットすることを忘れないようにしましょう。

# 5個以上存在する商品データを削除する
>>> cur.execute("DELETE FROM products WHERE quantity>=5")
>>> conn.commit()

テーブルの削除

データベースから切断

Python3でデータベースから切断するには、「コネクション名.close()」とします。プログラムを終了する前にデータベースから切断するようにしましょう。

>>> conn.close()

PythonでMySQLに接続する

PythonでMySQLに接続するには、MySQLを扱うためのドライバーをインストールしておく必要があります。なお、MySQLそのものも事前にインストールしておく必要がありますので、以下のウェブサイトを参考にMySQLを利用できる環境を整えておきましょう。

MySQLドライバーのインストール

PythonのMySQLドライバーには、いくつかの種類がありますが、ここでは「mysql-connetor-python」を「pip」でインストールします。

pipとはPythonのパッケージ管理ツールです。ライブラリをインストールするときにはとても便利なツールですので、以下のウェブサイトを参考にインストールしておくことをおすすめします。


pip install mysql-connector-python

インストールしたドライバーをPythonで使うためには最初にインポートするのを忘れないようにしましょう。

>>> import mysql.connector

接続する

まとめ

PythonでSQLを使ってデータベースを利用する方法についてお伝えしました。はじめのうちは、SQLiteを使って勉強することをおすすめします。

ひととおりマスターして、実際にアプリケーションを作ることになったら、MySQLなどを利用してみるといいでしょう。

データベースは奥が深く、一朝一夕でマスターできるものではありません。焦らずに、少しずつ慣れていきましょう。

Related