sqlite3モジュールの扱い方
Python でデータベースを作成し、表を作成して編集してみましょう。
データベースを使えるようになると、データの効率的な管理が出来たり、共有や同時アクセスが簡単に行えるなどの様々な利点があります。
他の Python の記事⼀覧は こちら
Python でデータベースを作成・利用
今回の記事では、データベースを操作するモジュールにsqlite3を使用します。
Python にはデータベースである「SQLite」が標準で含まれておりますので、環境準備の必要はありません。
sqlite3を使用して、レストランのデータベースの作成と、メニュー表の作成・編集を実施してみましょう。以下のmenulist.pyを作成して実行してみてください。
import sqlite3
restaurant = sqlite3.connect("restaurant.db") #restaurantデータベースに接続
cursor = restaurant.cursor() #カーソルを取得
cursor.execute("drop table if exists menulist") #もし既にmenulistテーブルがあるなら削除
cursor.execute("create table menulist(name CHAR(10), price INT)") #menulistテーブルを作成し、名前とデータ型を設定
cursor.execute("insert into menulist values('天丼', 950)") #menulistテーブルにデータを追加する
cursor.execute("insert into menulist values('かつ丼', 900)") #同様にデータを追加していく
cursor.execute("insert into menulist values('カレーライス', 800)")
cursor.execute("insert into menulist values('ざるそば', 700)")
restaurant.commit() #restaurantデータベースの変更を確定し、更新内容を保存する
allmenu = cursor.execute("select name, price from menulist") #allmenu変数にmenulistテーブルのデータを取り出して格納
for menu in allmenu:
print(menu) #allmenu変数から取り出したメニュー情報を表示
restaurant.close() #データベースをクローズ
実行してみると、ターミナルに以下の内容が出力されます。
('天丼', 950)
('かつ丼', 900)
('カレーライス', 800)
('ざるそば', 700)
restaurant.dbデータベースを作成し、menulistテーブルにメニューを格納・保存し、print文で表示しています。内容について1つずつ見ていきましょう。
データベースの作成
既存データベースへの接続・データベースの新規作成
import sqlite3
restaurant = sqlite3.connect("restaurant.db") #restaurantデータベースに接続
まずはsqlite3モジュールをimportし、connect()関数を用いてデータベースに接続します。接続先のデータベースが存在しない場合、新たに作成してから接続します。
今回は新しくrestaurant.dbというデータベースを作成し、接続しました。今後、このデータベース内にテーブルを作成・編集していきます。
カーソルの取得
cursor = restaurant.cursor() #カーソルを取得
カーソルはデータベースと Python の間で情報をやりとりするための手段です。
イメージとしては、カーソルはデータベースとのコミュニケーション窓口のようなものです。データベースに対して何かを頼んだり、情報を取得したりするときはこの窓口を通じて行います。
cursor()メソッドはこのカーソルを取得してくれます。この行ではrestaurantデータベースに対し、カーソルを取得しています。(前述のイメージで例えるなら、restaurantデータベースとの連絡窓口を作ったイメージです。)
テーブルの作成
cursor.execute("create table menulist(name CHAR(15), price INT)") #menulistテーブルを作成し、名前とデータ型を設定
取得したカーソルを使用し、データベースに指示を出します。execute()メソッドを使用することで、データベースに指示を与えて実行させることが出来ます。
今回はテーブルを作成するので、execute()メソッドにテーブルの作成を指示するSQL文(データベースを操作するための命令文)を記載します。
create table テーブル名 (列名1 データ型1, 列名2 データ型2, ...)
SQL文の記載は上記のようなルールに基づいて記載しています。
上記の記載によって、今回は「列名:name 、データ型:CHAR」と「列名:price、データ型:INT」で構成されたテーブルが作成されます。
テーブルにデータを追加する
cursor.execute("insert into menulist values('天丼', 950)") #menulistテーブルにデータを追加していく
cursor.execute("insert into menulist values('かつ丼', 900)") #同様にデータを追加していく
cursor.execute("insert into menulist values('カレーライス', 800)")
cursor.execute("insert into menulist values('ざるそば', 700)")
作成したmenulistテーブルにデータを格納し、保存していきます。
execute()メソッドに、テーブルに新しいレコード(行)を挿入するSQL文を記載します。
insert into テーブル名 values (値1, 値2, ...)
SQL文の記載は上記のようなルールに基づいて記載しています。
今回は、1行目ではmenulistテーブルに「かつ丼」という料理名(name)と、「900」という価格(price)を持つ新しいレコードを挿入します。2行目以降も同様に、menulistテーブルに料理名と価格をもつレコードを挿入しています。
この時点では、まだデータベースにメニューの情報は保存されていません。
テーブルの編集を保存する(コミットする)
restaurant.commit() #restaurantデータベースの変更を確定し、更新内容を保存する
レコードの挿入が終わったら変更を確定し、更新内容を保存します。編集内容をデータベースに保存するには、commit()メソッドを使用します。
commit()メソッドを呼び出さずにプログラムを終了した場合、変更は取り消されてデータベースには反映されません。したがって、データベースの変更を確定して保存するためにはcommit()メソッドを適切なタイミングで呼び出す必要があります。
データベースの情報を取得・利用
作成したデータベースからメニューの情報を取り出し、利用してみます。
データベースから情報を取り出すには、引き続きカーソルを使用します。
allmenu = cursor.execute("select name, price from menulist") #allmenu変数にmenulistテーブルのデータを取り出して格納
for menu in allmenu:
print(menu) #allmenu変数から取り出したメニュー情報を表示
変数allmenuに、menulistテーブルのメニュー情報を格納します。
データベースから情報を取り出すには、execute()メソッドにテーブルからデータを取得するSQL文を記載します。
select 列1, 列2, ... from テーブル名
SQL文の記載は上記のようなルールに基づいて記載しています。
今回は「列名:name 、データ型:CHAR」と「列名:price、データ型:INT」のmenulistテーブルを作成しましたので、取得したい列名をnameとpriceで指定しています。
データベースから取り出したメニュー情報が変数allmenuに格納されておりますので、for文で1つずつ取り出してprint文でターミナルに表示しています。
データベースからの切断
restaurant.close() #データベースをクローズ
データベースを使った処理が終了したら、データベースとの接続を切断しましょう。
不要な接続はシステムのリソースを消費したり、データベースサーバーに負荷をかける可能性があります。特に意図がなければ、忘れずに切断するようにしましょう。
データベースを利用する利点は、データの効率的な管理や保護、セキュリティの確保、データの整合性の維持など様々です。是非習得してデータ運用に生かしてください。
コメント