PythonでSQLiteのテーブルにレコードを追加

python コンピュータ
複数のURIを連続処理する場合、同じURIを実行しないようにするために利用。
スタックやキューのような処理で配列(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でキーが衝突することを想定していないので、このルーチンを組み込んだスクリプトを同時に複数実行してはいけない。

コメント