Python SQLite3 を操作する(重複チェック)

今考えているプログラムではデータベースにデータを登録する際に、すでに登録されているかどうかをチェックして重複しないように、未登録のデータのみを登録するようにしたいと考えています。

前回作ったデータベースapp_url カラムの値でチェックする場合だと以下の様な関数でチェックできそうです。

# app_url の値をチェックする
def is_exist_url(target):
    sql = 'SELECT app_url FROM apps WHERE app_url ="' + target + '"'
    cur = conn.execute(sql)
    if len(cur.fetchall()):
        return True
    else:
        return False

SQL を組み立てて実行し、その結果を fetchall() したリストの長さを調べます。もしすでに登録されていた場合はデータが入ったリストが返ってきますし、登録がなければ len(結果のリスト)0 になります。

def put_data2(app):
    with conn:
        if is_exist_url(app['app_url']):
            print('I have this')
        else:
            conn.execute('INSERT INTO apps VALUES (null, :app_url, :app_name, null)', app)

こういう感じで is_exist_url() の結果で場合分けしてやれば OK です。