今日も見に来てくださって、ありがとうございます。石川さんです。
Pythonからデータを保持するための方法のひとつ、sqlite3を利用してみます。sqlite3はPythonの標準ライブラリに含まれていますので、特別なインストールなど、不要です。それでいて、SQLが使えて、テーブルを作成してデータを簡単に保存したいというニーズに充分応えてくれます。
ぼくは普段のおしごとでは、Oracleを専門に扱っているのですけど、他のデータベースも知っておいた方がよいでしょう、ということで、ちょっぴりチャレンジしてみました。データベースをつくって、テーブルをつくって、データを入れて、検索する、という一連の流れを実行してみました。
ちなみに、sqlite3は、別のサーバプロセスを用意する必要はありません。その名のとおり軽量で、ディスク上のデータベースを提供してくれます。
ソースコード
import sqlite3 conn = sqlite3.connect('test.db') curs = conn.cursor() curs.execute("SELECT tbl_name FROM sqlite_master WHERE type = 'table'") tables = [table[0] for table in curs.fetchall()] if "BOOKS" in tables: curs.execute("DROP TABLE BOOKS") curs.execute("CREATE TABLE BOOKS ( ID NUMBER PRIMARY KEY, TITLE VARCHAR(30), PUBLISHED DATE)") curs.execute("INSERT INTO BOOKS (ID, TITLE, PUBLISHED) VALUES" " (1, '入門Python3', '2015-12-01')" ",(2, '実践Python3', '2015-12-01')" ",(3, 'Fluent Python', '2017-10-11')" ",(4, 'Effective Python', '2016-01-22')" ) conn.commit() curs.execute("SELECT * FROM BOOKS") rows = curs.fetchall() print(rows)
説明
1行目、ライブラリ名はsqlite3です。利用できるようにするため、importします。
3行目、sqlite3のデータベースを使えるようにするためには、まずConnectionオブジェクトを作る必要があります。データは「test.db」ファイルに格納されます。「:memory:」という特殊な名前を指定すると、RAM上にデータベースが作れるそうです。ちなみに、ファイルが存在しなくてもエラーにならず、勝手にファイルが作成されます。
5行目、データベースへの操作には、必ずカーソルが必要です。ということで、cursor()メソッドでカーソルを作成します。
このデータベースの中に、「BOOKS」テーブルを作成しようと思ったのですけど、既にこの「BOOKS」テーブルが存在した場合はいったん削除してから作成しましょう。7行目で指定した「sqlite_master」テーブルには、このデータベースの中に入っているシステムテーブルで、作られたオブジェクトの情報が入力されています。
7行目でSELECT文を定義して、8行目でデータを取り出しています。データはタプルで取り出されるので、リスト内包表記で一つ目の項目だけを取り出しています。10行目で比較するためです。1回目はテーブルが存在しないはずですので、12行目のテーブル削除は実行されず、12行目のCREATE TABLE文でテーブルをつくることから始めます。
13行目のINSERT文でデータを投入しています。今回は、1行で4件データを作成しています。sqlite3はINSERT一文で複数件投入できるのですね、便利です。
19行目、commit()です。これで、データが確定されました。
20行目以降、SELECT文でデータを取得しています。
まとめ
sqlie3、簡単ですね。ほとんど悩むことなく使えるようになりました。さすが標準モジュールです。