Python でデータベースを使用する

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() #データベースをクローズ

データベースを使った処理が終了したら、データベースとの接続を切断しましょう。
不要な接続はシステムのリソースを消費したり、データベースサーバーに負荷をかける可能性があります。特に意図がなければ、忘れずに切断するようにしましょう。

データベースを利用する利点は、データの効率的な管理や保護、セキュリティの確保、データの整合性の維持など様々です。是非習得してデータ運用に生かしてください。

(Visited 24 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次