複数のURIを連続処理する場合、同じURIを実行しないようにするために利用。
スタックやキューのような処理で配列(list)などでも作成できますが、永続化したいのでSQLiteで作成。
スタックやキューのような処理で配列(list)などでも作成できますが、永続化したいのでSQLiteで作成。
スクリプト
ファイル名:db.py
#!/usr/bin/env python3
# coding: utf-8
import sqlite3
import datetime
db_file = './download.db'
# データベースにuriを登録
def entry_uri(uri, local_file):
conn = sqlite3.connect(db_file)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS dlfiles
(uri text NOT NULL PRIMARY KEY, local_file text, date text)''')
sql = "INSERT INTO dlfiles VALUES ('{0}','{1}','{2:%Y-%m-%d %H:%M:%S}')".format(uri, local_file, datetime.datetime.now())
c.execute(sql)
conn.commit()
conn.close()
return
# uriが存在するか確認
def exists_uri(uri):
conn = sqlite3.connect(db_file)
c = conn.cursor()
sql = "SELECT * FROM dlfiles WHERE uri = '{0}'".format(uri)
c.execute(sql)
r = c.fetchall()
count = len(r)
conn.close()
return (count > 0)
if __name__ == '__main__':
uri = 'http://aaa'
entry_uri(uri, './hooo.txt')
print(exists_uri(uri))
覚書
- 関数ごとにデータベースと接続・切断をしている。
entry_uri()
で毎回テーブルを作成している。IF NOT EXISTS
でテーブルが存在していなければ作成する。- 特別データベースの作成処理をしなくとも
download.db
が出来上がっている。 - INSERTでキーが衝突することを想定していないので、このルーチンを組み込んだスクリプトを同時に複数実行してはいけない。
コメント