Contents
はじめに
こんにちは、野村です。
今回は、Python3とSQLite3を使ってキャラクターベースの日記帳を作ってみます。
日記なんか、月ごとにテキストファイルを作って書けば済むものです。
というか、実際にそういう日記を付けていました。
でも、SQLで検索できる方が便利な気がして、ちょっとこんなのも作ってみたのですよ。
データベースの作成
今回は、ホームデレクトリ直下に「db」というデレクトリを作成して、その中にデータベースを置きます。
$ mkdir ~/db $ cd ~/db $ sqlite3 nikki.sqlite
以下のようにテーブルを作成します。
sqlite> create table nikki( ...> date varchar(20) primary key, ...> text text);
SQLite3のプロンプトを抜けるときは、Ctrl-d。
スクリプト
パスの通ったデレクトリに以下のスクリプトを置いて「nikki」と名前を付け、実行権限を与えます。
#!/usr/bin/env python3 import datetime import sqlite3 import sys import os file_db = "/home/jake/db/nikki.sqlite" file_tx = "/tmp/nikki.txt" args = sys.argv op = "r" if len(args) < 2 else args[1] dt = "%" if len(args) < 3 else args[2] cn = sqlite3.connect(file_db); c = cn.cursor() if op == "d": # DELETE if dt != "%": c.execute("DELETE FROM nikki WHERE date LIKE '"+dt+"'") cn.commit() print("OK") if op == "r": # READ c.execute("SELECT * FROM nikki WHERE date LIKE '"+dt+"'") for row in c: print("-------------------") print(row[0]) print("-------------------") print(row[1]) print("") if op == "w": # WRITE if os.path.isfile(file_tx): f = open(file_tx, 'r') txt = "".join(f.readlines()).strip() f.close() if txt != "": now = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S") data = (now, txt) c.execute('''INSERT INTO nikki (date, text) VALUES (?, ?)''', data) cn.commit() os.remove(file_tx) print("OK") cn.close()
パーミッションは755。
$ chmod 755 nikki
使い方
記事を投稿する
長文を書く場合
ファイル「/tmp/nikki.txt」を作成し、そこに本文を保存し、以下のコマンドを実行します。
$ nikki w
コマンドを実行すると、ファイル「/tmp/nikki.txt」は自動的に消去されます。
一行だけ書く場合
一行日記の場合、コマンドラインから手軽に投稿できます。
$ echo "コマンドラインから日記を書いてみる" > /tmp/nikki.txt; nikki w
記事を表示する
すべての記事を表示
$ nikki
日付を曖昧検索して、表示する記事を絞り込むことができます。
2017年11月分を表示
$ nikki r 2017-11%
記事を削除する
2017年11月30日の記事をすべて削除
$ nikki d 2017-11-30%
最後に
以上、Python3とSQLite3でキャラクターベースの日記帳を作ってみました。
実際に半年ほどこれで日記を付けていたのだけど、PCを新調(UbuntuからWin10)したのを期に中断したままだったりする。
というわけで、今回はこれにて。