sqliteのDBを比較するスクリプトを書いた
諸事情でgithubからは消してたけど復活させた。
DBを使うテストなんかで呼び出す。
結果を標準出力にテーブル単位で出力して、差があるようならdiff.dbにレコード単位で保存。
実行すると、データに差がなければOK、差があればNGって出る。
+--------------------------------+--------------------------------+--------+ | old_tbl | new_tbl | status | +--------------------------------+--------------------------------+--------+ | t060_filtering_collate_history | t060_filtering_collate_history | OK | | t022_text | t022_text | OK | | t027_alias_num | t027_alias_num | *NG* | | t013_num | t013_num | OK | +--------------------------------+--------------------------------+--------+
インストール
ライブラリを入れる。
pip install prettytable
githubからソースを持ってくる。
github.com
sqliteも入れてパスを通すかsqlite_diff.pyと同じディレクトリに置く。
windowsならsqlite-tools-win32-x86-xxxxxxxxx.zipってやつ。
SQLite Download Page
使い方
a.dbとb.dbを比較して、どのテーブルのどのデータに差分があるのか調べる。
python sqlite_diff.py A.db B.db
列を無視して比較。
全てのテーブル共通で更新日がある場合なんかに使う。
python sqlite_diff.py A.db B.db --ignore modified
テーブルごとに無視する列を決める。
テーブル名:列名のフォーマット。
python sqlite_diff.py A.db B.db --ignore-tbl-col test:id
テスト対象外としたいテーブルがある場合。
python sqlite_diff.py A.db B.db --ignore-tbl test
PKを指定する。
テーブル内のデータ同士はPKを使って比較するので、PK制約はサロゲートキーであるidに貼ってあるけど、ほんとはparent_table_id,cif_person_id,black_pkで一意になるってことならこうする。
python sqlite_diff.py A.db B.db --ignore id collate_date --unique t063_filtering_collate_result:parent_table_id,cif_person_id,black_pk