Python

【Python】SQLite3データベースの使い方【→業務効率UP】

7月 23, 2019

how to control sqlite3 database on python
プログラム学生
プログラムが動いていない間も、データを保存しておきたい場合は、どうすればいいんですか?
その場合は、データベースにデータを保存すればいいよ。今回はsqlite3のデータベースの操作方法を紹介するね。
Tommy

この記事で分かること

  • PythonプログラムでSQLiteデータベースを操作する方法が分かる
  • SQL形式のデータベース操作とは何かが方法が分かる

PythonでSQLite3データベース使い方の概要

summary of sqlite3 database on python

この記事では、Pythonを使ったデータベース(SQLite)ファイルの作成方法と、データベースファイルへのデータ保存方法、データ参照を方法を説明します。

この記事を読むことによって、データベースの操作方法がわかり、Pythonプログラムが動作していない間も、データを保存しておくことができます。

PythonでSQLite3データベース使い方の前提環境

environment of sqlite3 database on python

SQLiteのデータベースの操作の前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

オススメ
how to check version in python
【Python】バージョン確認の方法【→プログラミング初心者向け】

続きを見る

レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

オススメ
how to programming on rental server
【Linux】レンタルサーバーでプログラミングする方法【→ブログのサーバーでできる!】

続きを見る

PythonでSQLite3データベース使い方のサンプルプログラム

sample program of sqlite3 database on python

ここでは、SQLite3ライブラリを使ったデータベースを操作するサンプルプログラムを説明します。データベースを操作する方法として次にような種類の操作があります。

  • テーブルの作成
  • テーブルの削除
  • テーブルデータの挿入
  • テーブルデータの参照

データベースにおいて、「テーブル」とは、『データのどのような形でデータベースに入っているか』というデータの整理のしかたのことです。例えば、お弁当をイメージすると分かりやすいと思います。お弁当自体がデータベース、どこがご飯、どこがお惣菜というお弁当のの区分けがテーブル、そして、ご飯とお惣菜がデータです。食材(データ)をお弁当(データベース)に並べるかということを示すのが、テーブルということになります。

SQLite3データベースを操作するサンプルプログラムは次に順番で説明します。

  1. SQLite3データベース操作ライブラリのインポート
  2. SQLite3データベーステーブルを作成する関数定義
  3. SQLite3データベーステーブルを削除する関数定義
  4. SQLite3データベーステーブルデータを挿入する関数定義
  5. SQLite3データベーステーブルデータを参照する関数定義
  6. 定義した関数の実行処理

1.SQLite3データベース操作ライブラリのインポート

まず初めに、各種ライブラリをインポートします。SQLiteの操作に必要なライブラリ「sqlite3」、ファイル削除に必要なライブラリ「os」をインポートしています。

import sqlite3
import os

  1. ライブラリ「sqlite3」をインポートする。
  2. ライブラリ「os」をインポートする。

2.SQLite3データベーステーブルを作成する関数定義

次は、データの保存に必要なテーブルの作成を行います。まず、「sqlite3」ライブラリの「connect」関数によって、データベースファイルが作成されます。次に、「CREATE TABLE」というSQLコマンドによってテーブルを作成しています。

# テーブルの作成
def create_table():

	# Connectionオブジェクトの作成
	conn = sqlite3.connect('Test.db')

	# Cursorオブジェクトの作成
	con = conn.cursor()

	try:
		# TEST_DB_TABLEという名前のテーブルを作成する
		con.execute('''CREATE TABLE '''+'TEST_DB_TABLE'+''' (
				key1 varchar(64),
				key2 varchar(64)
			)''')

	except sqlite3.OperationalError:
		print("couldn't create table")

  1. 「create_table」を定義宣言する。
  2. 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
  3. 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
  4. エラーが発生しない間は以下の処理を実行する。
    1. 64バイトのchar型の変数「key1」と「key2」をカラムに指定して、「TEST_DB_TABLE」で指定されたテーブル名でDBテーブルを作成する。
  5.  エラーが発生した場合は以下の処理を実行する。
    1. 文字列「couldn't insert table」を表示する。
  6. 変数「conn」の関数「commit」を呼び出して、変更を保存する。

3.SQLite3データベーステーブルを削除する関数定義

次は、テーブルの削除を行います。Cursorオブジェクトの作成までは、前述のテーブル作成手順と同じです。その後、「DROP TABLE」というSQLコマンドによって、テーブルを削除します。

現在のSQLコマンドでは、データベースファイル自体を削除することができないので、「os」コマンドを用いて、データベースファイル自体を削除しています。

# テーブルとDBファイルの削除
def delete_table():

	# Connectionオブジェクトの作成
	conn = sqlite3.connect('Test.db')

	# Cursorオブジェクトの作成
	con = conn.cursor()

	try:
		# TEST_DB_TABLEという名前のテーブルを削除する
		con.execute('''DROP TABLE ''' + 'TEST_DB_TABLE')

	except sqlite3.OperationalError:
		print("The table's already been removed")

	# Connectionオブジェクトを閉じる
	conn.close()

	# dbファイルの削除
	os.remove('./' + 'Test.db')

  1. 「delete_table」を定義宣言する。
  2. 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
  3. 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
  4. エラーが発生しない間は以下の処理を実行する。
    1. DBテーブルを削除する。
  5.  エラーが発生した場合は以下の処理を実行する。
    1. 文字列「The table's already been removed」を表示する。
  6. 変数「conn」の関数「close」を呼び出して、Cursorオブジェクトを閉じる。
  7. カレントディレクトリの「Test.db」という名前のdbファイルの削除する。

4.SQLite3データベーステーブルデータを挿入する関数定義

次は、前述で作成したデータベーステーブルの対して、テーブルデータの挿入(保存)を行います。Cursorオブジェクトの作成までは、前述のテーブル作成手順と同じです。その後、「INSERT INTO」というSQLコマンドによって、テーブルデータの挿入(保存)を行います。

# テーブルデータの挿入
def insert_table(table_name,i_table):

	# Connectionオブジェクトの作成
	conn = sqlite3.connect('Test.db')

	# Cursorオブジェクトの作成
	con = conn.cursor()

	try:
		# テーブルを作成する為のコマンドを作成
		command = 'INSERT INTO '+ table_name + ' VALUES('
		for i in range(len(i_table)):
			command += '?,'
		command = command[:-1] + ')'

		# テーブルを挿入
		con.execute(command, i_table)

	except sqlite3.OperationalError:
		print("couldn't insert table")

	# 変更を保存する
	conn.commit()

  1. 関数「insert_table」を定義宣言する。
  2. 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
  3. 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
  4. エラーが発生しない間は以下の処理を実行する。
    1. 引数で得られた「i_table」からDBの挿入コマンドを作成し、そのコマンドで変数「command」を初期化する。
    2. 作成してコマンド「command」と引数で得られた「i_table」からテーブルを挿入する。
  5.  エラーが発生した場合は以下の処理を実行する。
    1. 文字列「couldn't insert table」を表示する。
  6. 変数「conn」の関数「commit」を呼び出して、変更を保存する。

5.SQLite3データベーステーブルデータを参照する関数定義

そして次は、先ほど保存したテーブルデータを参照する方法を説明します。「SELECT」と呼ばれるSQLコマンドによってテーブルデータを読み出します。Cursorオブジェクト「con」に対して、「fetchall」関数を呼び出すことで、それぞれの要素を取得することができます。

# テーブルデータの参照
def refer_table_data(table_name):

	# Connectionオブジェクトの作成
	conn = sqlite3.connect('Test.db')

	# Cursorオブジェクトの作成
	con = conn.cursor()

	# Selectコマンド実行
	con.execute('SELECT ' + '*' + ' from ' + table_name)
	for item in con.fetchall():
		print(item)

  1. 関数「refer_table_data」を定義宣言する。
  2. 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
  3. 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
  4. DBコマンド「SELECT」をDBテーブル「table_name」に対して実行する。
  5. 得られた全てのDBの内容を変数「item」に取り出し、以下の処理を繰り返す。
    1. 変数「item」の内容を表示する。

6.定義した関数の実行処理

最後に、上で定義した4つの関数の呼び出しを行います。ここでは、作成し、挿入するテーブルの名前は、「TEST_DB_TABLE」に設定しています。テーブル「TEST_DB_TABLE」には、「Date1」と「Date2」という2つのstring型の文字列のデータが入っていることになります。

if __name__ == '__main__':

	# テーブルの作成
	create_table()

	# テーブルデータの挿入
	i_table = ['Date1','Date2']
	insert_table('TEST_DB_TABLE',i_table)

	# テーブルデータの参照
	refer_table_data('TEST_DB_TABLE')

	# テーブルの削除
	delete_table()

  1. 関数「create_table」を呼び出す。
  2. 変数「i_table」を 文字列「Date1」と「Date2」で初期化する。
  3. DBテーブル「TEST_DB_TABLE」に変数「i_table」を挿入する為に「insert_table」を呼び出す。
  4. DBテーブル「TEST_DB_TABLE」を参照する為に「refer_table_data」を呼び出す。
  5. 関数「delete_table」を呼び出す。

-Python
-