見出し画像

Python SQlite3 複数要素を追加する

Insert を使う

複数の要素を同じ行に追加したかったけど

クセがあって、なかなかうまくいかなかった

カラムと同じ要素数のクエスチョンマークのリスト

?,?,?,? 

を作るようにしたらいけた。

関数にしてメモしておきます。

引数にディレクトリ、テーブル名、カラムのリスト、値のリスト

かなり変な感じだけど、とりあえずこれで動きました。

import sqlite3

def note_db_insert(dir,table,column_list,value_list):

    """
    引数dirはディレクトリ
    例 'datebase/note.db'
    引数tableは変更したいテーブル
    
    引数column_listは変更したい要素に対応するカラム(文字列で)を入れたリスト、
    value_listと要素数が同じになるようにする。

    引数value_listは追加したい要素を入れたリスト、
    column_listと要素数が同じになるようにする。
    カラムの順番と合わせる。
    
    """
    connect_db = sqlite3.connect(dir, timeout=10)
    cur = connect_db.cursor()

    columun_text = ''
    for i in range(len(column_list)):
        columun_text = columun_text+column_list[i]+','
    columun_text = columun_text[:-1]

    value_text = ''
    for i in range(len(value_list)):
        value_text = value_text+str(value_list[i])+','
    value_text = value_text[:-1]

    q_list = ''
    for i in range(len(value_list)):
        q_list = q_list+'?,'
    q_list = q_list[:-1]

    sql = 'INSERT INTO '+table+'('+columun_text+') values('+q_list+')'
    cur.execute( sql,value_list)

    connect_db.commit()
    connect_db.close()

コーヒー飲みます。ありがとうございます。