この記事で分かること
- PythonプログラムでSQLiteデータベースを操作する方法が分かる
- SQL形式のデータベース操作とは何かが方法が分かる
PythonでSQLite3データベース使い方の概要
この記事では、Pythonを使ったデータベース(SQLite)ファイルの作成方法と、データベースファイルへのデータ保存方法、データ参照を方法を説明します。
この記事を読むことによって、データベースの操作方法がわかり、Pythonプログラムが動作していない間も、データを保存しておくことができます。
PythonでSQLite3データベース使い方の前提環境
SQLiteのデータベースの操作の前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。
レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。
もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。
PythonでSQLite3データベース使い方のサンプルプログラム
ここでは、SQLite3ライブラリを使ったデータベースを操作するサンプルプログラムを説明します。データベースを操作する方法として次にような種類の操作があります。
- テーブルの作成
- テーブルの削除
- テーブルデータの挿入
- テーブルデータの参照
データベースにおいて、「テーブル」とは、『データのどのような形でデータベースに入っているか』というデータの整理のしかたのことです。例えば、お弁当をイメージすると分かりやすいと思います。お弁当自体がデータベース、どこがご飯、どこがお惣菜というお弁当のの区分けがテーブル、そして、ご飯とお惣菜がデータです。食材(データ)をお弁当(データベース)に並べるかということを示すのが、テーブルということになります。
SQLite3データベースを操作するサンプルプログラムは次に順番で説明します。
- SQLite3データベース操作ライブラリのインポート
- SQLite3データベーステーブルを作成する関数定義
- SQLite3データベーステーブルを削除する関数定義
- SQLite3データベーステーブルデータを挿入する関数定義
- SQLite3データベーステーブルデータを参照する関数定義
- 定義した関数の実行処理
1.SQLite3データベース操作ライブラリのインポート
まず初めに、各種ライブラリをインポートします。SQLiteの操作に必要なライブラリ「sqlite3」、ファイル削除に必要なライブラリ「os」をインポートしています。
import sqlite3
import os
- ライブラリ「sqlite3」をインポートする。
- ライブラリ「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")
- 「create_table」を定義宣言する。
- 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
- 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
- エラーが発生しない間は以下の処理を実行する。
- 64バイトのchar型の変数「key1」と「key2」をカラムに指定して、「TEST_DB_TABLE」で指定されたテーブル名でDBテーブルを作成する。
- エラーが発生した場合は以下の処理を実行する。
- 文字列「couldn't insert table」を表示する。
- 変数「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')
- 「delete_table」を定義宣言する。
- 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
- 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
- エラーが発生しない間は以下の処理を実行する。
- DBテーブルを削除する。
- エラーが発生した場合は以下の処理を実行する。
- 文字列「The table's already been removed」を表示する。
- 変数「conn」の関数「close」を呼び出して、Cursorオブジェクトを閉じる。
- カレントディレクトリの「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()
- 関数「insert_table」を定義宣言する。
- 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
- 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
- エラーが発生しない間は以下の処理を実行する。
- 引数で得られた「i_table」からDBの挿入コマンドを作成し、そのコマンドで変数「command」を初期化する。
- 作成してコマンド「command」と引数で得られた「i_table」からテーブルを挿入する。
- エラーが発生した場合は以下の処理を実行する。
- 文字列「couldn't insert table」を表示する。
- 変数「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)
- 関数「refer_table_data」を定義宣言する。
- 関数「sqlite3.connect」をDBファイル名「Test.db」の引数で呼び出し得られたDBオブジェクトで、変数「conn」を初期化する。
- 変数「con」 を関数「conn.cursor」から返却されるCursorオブジェクトで初期化する。
- DBコマンド「SELECT」をDBテーブル「table_name」に対して実行する。
- 得られた全てのDBの内容を変数「item」に取り出し、以下の処理を繰り返す。
- 変数「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()
- 関数「create_table」を呼び出す。
- 変数「i_table」を 文字列「Date1」と「Date2」で初期化する。
- DBテーブル「TEST_DB_TABLE」に変数「i_table」を挿入する為に「insert_table」を呼び出す。
- DBテーブル「TEST_DB_TABLE」を参照する為に「refer_table_data」を呼び出す。
- 関数「delete_table」を呼び出す。