Python

Python初学者向け:Pythonを使ったデータベース操作

スポンサーリンク

 

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

▶ SQLite3の基本操作は以下の記事をご覧ください。

Python初学者向け:SQLite3の基本を解説(テーブル作成)
今回からデータベースを扱うことにします。PythonにはSQLite3が標準ライブラリに入っているのでこれを使っていくことにしましょう。SQLiteは軽量で使いやすく、他のDBと共通点も多いのでまず学ぶにはよいかと思います。テーブルの作成から始めていくことにしましょう。
Python初学者向け:SQLite3の基本を解説(レコードの抽出)
今回はデータベースに格納されたデータを参照する方法を基本から解説します。今回もPythonから離れてSQLite3で直接データの参照をみていきましょう。データの参照にはSELECT文を使います。SELECT文にはいろんなオプションがありますが、まずは基本の部分だけを扱います。
Python初学者向け:SQLite3の基本を解説(レコード作成)
前回はテーブルの作成をおこないました。データベースシリーズの2回目はレコードの作成方法を扱うことにします。今回もPythonから離れてSQLで直接レコードを作成する方法を見ていきましょう。前回テーブルを作成したディレクトリでSQLite3を立ち上げましょう。
Pyshon初学者向け:CSV形式のデータをSQLite3にimportする
今回はSQLiteに外部のcsv形式のファイルからデータを取り込む方法を基本から解説します。これまでテーブルの作成、レコードの作成とみてきましたが、実際には外部からデータを取り込むことが多いでしょう。基本から丁寧に解説していきます。

はじめに

今回は、Pythonからデータベースを操作する方法を基本から解説します。これまで、SQLite3の操作でデータベースを操作する方法をみてきましたが、Pythonから直接操作したいことも多いでしょう。Pythonにデフォルトで用意されているsqlite3モジュールを使います。

▶ MySQLを操作したい場合は以下の記事をご覧ください。

sqlite3モジュールの基本

データベースとの接続(connectオブジェクトの作成)

Pythonからデータベースを操作するときにはまず、データベースとの接続をする必要があります。この役目を果たすのがsqlite3モジュールに用意されているconnect()です。次の書式で使います。

sqlite3.connect(‘データベース名’)

データベース名は既存のものがなければ、あらたに指定した名称のデータベースを作成して、コネクションオブジェクトを返します。このコネクションオブジェクトを変数に格納して、このオブジェクトに用意されたメソッドを呼び出してデータベースの操作をしていきます。

データベースを操作する準備(cursorオブジェクトの作成)

コネクションオブジェクトに用意されているメソッドの1つにcursor()メソッドがあります。次の書式で使います。

コネクションオブジェクト.cursor(‘SQL文’)

上記のようにcursor()の中で直接SQL文を指定することができますが、一度、変数に格納するほうがわかりやすいのですね。実際、ほとんどの場合そのようにするかと思います。

Pythonからの操作をする

テーブルの作成

では前にSQLite3からの操作で作ったAnimalテーブルを作ってみましょう。

▶ SQLite3の操作によるテーブルの作成は以下の記事をご覧ください。

作成するテーブルの情報をまとめておきましょう。

  • ID
    文字通りIDとなるカラムに設定
  • Name
    どうぶつたちのなまえを保管するカラムとします
  • Zoo
    どうぶつたちの出身の「どうぶつえん」の名前を保管するカラムとします
  • Age
    どうぶつたちの年齢を保管するカラムとします

これをPythonからの操作でつくってみます。

import sqlite3

con = sqlite3.connect('animal.db')
cursor = con.cursor()

create_animal_table = '''
CREATE TABLE Animal (
    ID INTEGER PRIMARY KEY NOT NULL,
    Name TEXT NOT NULL,
    Zoo TEXT DEFAULT 'UnKnown',
    Age INTEGER CHECK(Age>0)
)
'''

cursor.execute(create_animal_table)

まず1行目でsqlite3モジュールのインポートをします。3行目でanimal.dbへの接続をしています。animal.dbがない場合は作られます。返り値がコネクションオブジェクトとなるのでこれをconという変数に格納しています。4行目ではコネクションオブジェクトconに対してcursor()メソッドを呼び出しています。返り値をcursorという変数に入れています。

6~12行目がSQL文となります。ここではanimalというテーブルを作成するSQL文を発行しています。Pythonから操作する場合でも、この部分はSQL文の知識が必要となります。12行目の最後の部分はSQLでは「;(セミコロン)」が必要でしたが、Pythonから実行する場合は不要となるので注意しましょう。※「;(セミコロン)」をつけてもこのコードの場合は動きますが、SQL文をこの後につなぐような場合を考慮して、セミコロンなしとしておいたほうが良いでしょう。

このコードを実行してエラーが起きなければ成功です。ターミナルから確認しておきましょう。

tableとschemaの確認

テーブルAnimalがちゃんとできてますね。

レコードの作成

次にレコードの作成です。こちらも同じような操作でおこなうことができます。レコードを作成するSQL文をinsert_animal_queryという変数に入れることにしましょう。

insert_animal_query = '''
    INSERT INTO Animal(ID,Name,Zoo,Age)
    VALUES(1, 'らくだ', '旭山動物園', 32)
'''

cursor.execute(insert_animal_query)

これを実行するとエラーが返ってきません。では、ちゃんとレコードができているかターミナルで確かめてみましょう。

ターミナルでレコードの確認

これを実行しても何も返ってきません。どうしてでしょうか?

一般的にデータベースに対する操作では「コミット」という処理がされない限り結果が反映されないのが原則となります。(先ほど実施した「CREATE TABLE」に関してはSQLite側で自動でコミットされる(オートコミット)ように設定されています。)

この「コミット」はデータベースとの接続であるコネクションオブジェクトに対して実施します。次のような書式となります。

コネクションオブジェクト.commit()

これを実施すると、このコネクションオブジェクトに関するこれまでのクエリをすべてコミットしてくれます。コミットされると、データベースがsaveされて永続化してくれます。

ではコミットしてからレコードを確認してみましょう。

cursor.execute(insert_animal_query)
con.commit()
コミット後にレコードの確認

今度はちゃんとレコードの確認がとれました。

スポンサーリンク

まとめ

今回はPythonからデータベースを操作する方法をSQLite3を例に解説しました。Pythonではsqlite3というモジュールがあらかじめ用意されており、このモジュールを介してデータベースの操作をします。

まずはデータベースとの接続(connect)をし、次に位置を示すcursorオブジェクトを作り、このオブジェクトに対して操作をするのでした。

データベースの操作は基本的にコミットという作業が必要で、これをすることでデータベースが保存されて永続化します。

コメント

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