Python では、バージョン 2.5 から標準ライブラリに含まれる sqlite3 モジュールで SQLite のデータベースを利用できるようになっています [1]。Python から SQL 文を実行することで、プログラム的には非常に柔軟にデータベースを操作することができるようになります。
以前、本ブログで sqlite3 のコマンドを紹介しましたが [2]、今回は Python から SQLite のデータベースを操作する例を紹介します。
使用環境は以下のとおりです。
- OS: Fedora 25 beta (x86_64)
- Python: python-2.7.12-7.fc25.x86_64
ここで紹介する例は、DBOnline の SQLite入門 › データの追加と削除 › データの更新 [3] で使われている例をベースにして、Python から操作したかのように焼き直しています。あらかじめご了承ください。
データベースの作成とデータの追加
データベースの作成とデータを追加する例を示しました。
# -*- coding: utf-8 -*- import os import sqlite3 db_name = "test01.db" db_file = os.path.join(os.environ['HOME'], "tmp", db_name) conn = sqlite3.connect(db_file) cur = conn.cursor() sql = "create table staff(id integer, name text, unit text, flag text);" cur.execute(sql) sql = "insert into staff(id, name, unit, flag) values (?, ?, ?, ?);" users = [ (1, 'Satoh', 'Sales', 'Yes'), (2, 'Mori', 'Office', 'No'), (3, 'Yamada', 'Office', 'Yes'), (4, 'Asada', 'Tech', 'Yes'), (5, 'Noguchi', 'Sales', 'No') ] cur.executemany(sql, users) conn.commit() sql = "select * from staff;" for row in cur.execute(sql): print(row) conn.close()
実行例を示します。
(1, u'Satoh', u'Sales', u'Yes') (2, u'Mori', u'Office', u'No') (3, u'Yamada', u'Office', u'Yes') (4, u'Asada', u'Tech', u'Yes') (5, u'Noguchi', u'Sales', u'No')
データの更新
これは特定のレコードのデータを更新する例です。レコードを決めて更新するのではつまらないので、name フィールドが 'Yamada' であるレコードを探し、'Yamaoka' に変更するようにしました。しかし、合致するレコードは(あるとしても)一つしかないという前提でコーディングしています。
# -*- coding: utf-8 -*- import os import sqlite3 db_name = "test01.db" db_file = os.path.join(os.environ['HOME'], "tmp", db_name) conn = sqlite3.connect(db_file) cur = conn.cursor() user = ('Yamada',) cur.execute('select * from staff where name = ?', user) result = cur.fetchone() if isinstance(result, tuple): sql = "update staff set name = ? where id = ?;" user_swap = ['Yamaoka', result[0]] cur.execute(sql, user_swap) conn.commit() sql = "select * from staff;" for row in cur.execute(sql): print(row) else: print result conn.close()
実行例を示します。
(1, u'Satoh', u'Sales', u'Yes')
(2, u'Mori', u'Office', u'No')
(3, u'Yamaoka', u'Office', u'Yes')
(4, u'Asada', u'Tech', u'Yes')
(5, u'Noguchi', u'Sales', u'No')
Python の sqlite3 モジュールの使い方については、参考サイト [4] に判りやすくまとめられていましたので、参考にさせていただきました。
参考サイト
- 11.13. sqlite3 — SQLite データベースに対する DB-API 2.0 インタフェース — Python 2.7.x ドキュメント
- bitWalk's: sqlite3 のコマンド [2016-10-02]
- データの更新(UPDATE文) - SQLite入門
- Pythonでsqlite - Qiita [2016-05-12]
にほんブログ村
0 件のコメント:
コメントを投稿