簡易db on python
import pickle class Sdb: def __init__(self): self.db = {} # dict def add(self,name,val): self.db[name] = val def val(self,name): return self.db[name] class Pdb(Sdb): file="dbname" def load(self): with open(file,'r') as f: self.a = pickle.load(f) return self.a def dump(self): with open(file,'wb') as f: pickle.dump(self, f)
利用方法
$ cmd1 | sdb # regist & embed $ cmd1 > a # save raw $ sdb -f a # regist & embed $ sdb -l # show list $ cmd2 -name `sdb 3` params # show id
利用頻度
- パイプ
- 埋め込み
- 読み込み
- リスト
利用頻度を考慮した、実装の選択。 パイプを最も早く実行する実装を検討する。 操作は、name =〉id 変換。
csv: 全リード後に辞書検索。 sql: maclistで検索し、辞書化し検索。
db実装
sqlの場合
# nameを読み込み、names dict作成 # names =(name:-1, ...) # name のidを検索 sql="select id,name from tab where name in ( ? ) " para = ",".join(names.keys()) for x in c.execute(sql, para): id = x[0] name = x[1] names[name]= id # 新規nameを検索し登録 # 新規nameのidを取得 # 出力時に、name とid を出力。
sql の例2
- 入力読み込み。
- 新規nameを登録。 insert into tab(name) select name from tab where not exists (select id from tab where name = ?)
- selectでid取得。
- id,nameを出力。