【sqlite3】for文を使用して、複数列に文字列を挿入したい。

デモなどで「INSERT INTO」文でデータベースに複数列入れることがよくあると思います。しかし、実践ではfor文も組み込んで行うことがあると思いますが、デモではあまりありません。

以下のコードのようにfor文の中に「INSERT INTO」文をを組み込んで、実行するとエラーが発生します。

import sqlite3conn = sqlite3.connect("test22.db")cur = conn.cursor()url = ["https://lifeinfo-navi.com/p=2977","https://lifeinfo-navi.com/p=2513","https://lifeinfo-navi.com/"]cur.execute('CREATE TABLE pre(id INTEGER PRIMARY KEY AUTOINCREMENT ,url_col TEXT,pre_col TEXT)')sql = 'INSERT INTO pre(url_col,pre_col) VALUES(?,?)'for i in range (0,len(url)): cur.execute('INSERT INTO pre(url_col,pre_col)VALUES(url[i],url[i])') time.sleep(1)cur.execute('SELECT * FROM pre')print(cur.fetchall())
結果:OperationalError: near "[i]": syntax errorこちらの記事を書きながら、思い出しましたが、確か8行目のVALUESに変数を入れるときは「?」にするんでしたっけ?やっぱりでした。以下のように修正すると成功しました。
import sqlite3conn = sqlite3.connect("test23.db")cur = conn.cursor()url = ["https://lifeinfo-navi.com/p=2977","https://lifeinfo-navi.com/p=2513","https://lifeinfo-navi.com/"]cur.execute('CREATE TABLE pre(id INTEGER PRIMARY KEY AUTOINCREMENT ,url_col TEXT,pre_col TEXT)')sql_insert = ('INSERT INTO pre(url_col,pre_col)VALUES(?,?)')for i in range (0,len(url)): cur.execute(sql_insert,(url[i],url[i],)) time.sleep(1)cur.execute('SELECT * FROM pre')print(cur.fetchall())

記事にするほどでもありませんでしたが、いつも通り、記録として残しておきます。




【sqlite3】for文を使用して、複数列に文字列を挿入したい。
ツイートもチェックしよう!