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 から操作したかのように焼き直しています。あらかじめご了承ください。
データベースの作成とデータの追加
データベースの作成とデータを追加する例を示しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # -*- 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' に変更するようにしました。しかし、合致するレコードは(あるとしても)一つしかないという前提でコーディングしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # -*- 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 件のコメント:
コメントを投稿