【Python】sqlite3でDBの用意|非プログラマーのためのスクレイピング講座(Colaboratory) | ムノログ 合同会社ムジンケイカクプロのITノウハウブログ
Pythonと機械学習

【Python】sqlite3でDBの用意|非プログラマーのためのスクレイピング講座(Colaboratory)

python Pythonと機械学習

SQliteでDBを用意していきます。

これはスクレイピング時に、このURLって処理したかな?とか、連続でURLを処理していく時にフラグを立てて、やったやってないを判定するのに使っています。

【Python】非プログラマーのためのスクレイピング講座目次(Colaboratory)

注意

私は、別に綺麗にプログラムを書けるわけでも、知識豊富なわけでもありません。

このコンテンツは、気軽に触って学べれば、あとは自分で頑張るって人を応援するコンテンツです。

Colaboratoryを使って環境構築や個々人の環境の差をなくしています。

Colaboratoryは速いです。

SQLite?(適当解説)

データベースを作る際に、お勤めの会社ではおそらくDBサーバを立てていると思います。

これはアプリという単位でお手軽です。
実際にスマホアプリでも使います。

SQLiteのライセンスはパブリックドメインになっており、利用に際しライセンス問題は意識せず利用できます。

DB作る前に

ColaboratoryとGoogle Driveを連携します。

ドライブをマウント(読み込んで)して、そのフォルダにDBファイルを格納します。

以下の場合は、Google Drive直下のColab Notebooksフォルダの中のsampleフォルダをマウント。

from google.colab import drive 
drive.mount('/content/drive/')
%cd "/content/drive/My Drive/Colab Notebooks/sample/"

DB作る魔法の言葉

魔法の言葉。

import sqlite3

DB作る関数

適当に関数作っておく。

この場合は、URLというデータの列が常にかぶりのないユニークな値になり、タイトルはサイトタイトル、フラグは処理したしないのフラグなどに使います。

テーブル名の指定で変数を使いたい時に、いろいろやりかたはありますが、以下は例のひとつ。

def db_make(db_name,table_name):
    conn = sqlite3.connect(db_name)
    cur = conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS %s (URL unique,title,flag)" % table_name)
    conn.commit()
    conn.close()

DBのテーブルをチェックする関数

適当に関数作っておく。

私のように常軌を逸したぼーっとした人だと、適当な名前でテーブル名を作ってしまい、DB内が散らかります。

そのため、DB内のテーブル一覧を出力できる関数を常に用意しています。

クライアントも間違うこともあるので、納品物に入れておくと便利だった。

def db_tb_check(db_name,table_name):
    conn = sqlite3.connect(db_name)
    cur = conn.cursor()
    cur.execute("select name from sqlite_master where type='table'")
    for x in cur.fetchall():
      print(x)
    conn.close()

DBのテーブルを削除する関数

絶対に間違えて実行しないように。

def db_deldel(db_name,table_name):
    conn = sqlite3.connect(db_name)
    cur = conn.cursor()
    cur.execute('DROP TABLE {}'.format(table_name))
    conn.commit()
    conn.close()

DB名(ファイル名)とテーブル名を決める入力欄を用意

#DB作成
db_name = "mkp_sample.db"#@param {type:"string"}
table_name = "mkp_01_tb"#@param {type:"string"}

各プログラムの実行方法

db_make(db_name,table_name)

db_tb_check(db_name,table_name)

db_deldel(db_name,table_name)

実際の運用はClass化して別ファイルにしています。
しかし、テスト時はClassファイルの更新後の読み込みに不具合が出ることがあるため、直接書いたりします。
※リロードしてもダメな時がごくたまにある