[Python3]SQLite3へUPDATEするときにループ(for)を使う方法
やりたいこと
先にSELECTを用いて元となるデータを取得したのち、forを使ってUPDATEをループしそれぞれ更新する
1回のみ実行されるプログラム
import sqlite3
n = 1
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
data = cursor.execute("select * from task")
for i in data:
title = i[0]
status = i[1]
cursor.execute("update task set status=? where title=?", (status, title))
cursor.close()
conn.commit()
print(n)
n += 1
本来は・・・
- data = cursor.execute("select * from task")
によって取得することを定義
- for i in data
で実行される
- 取得したリストdataをfor i in data:
の部分で1文ずつ繰り返しながらUPDATE
- print(n)
で処理回数を表示
するはずなのですが
出力は「1」としか出てこない
解決策まとめ
情報元
というわけで情報を検索して探していたところ見つけました。
python sqlite3 for loop update
先人に感謝です
解決策
data = data.fetchall()
をループの前に追加するだけ
重要なのは.fetchall()
の部分みたいです
修正後のプログラム
import sqlite3
n = 1
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
data = cursor.execute("select * from task")
#この後に追加する
data = data.fetchall()
for i in data:
title = i[0]
status = i[1]
cursor.execute("update task set status=? where title=?", (status, title))
cursor.close()
conn.commit()
print(n)
n += 1
まとめ
SQLite3へUPDATEするときにループ(for)を使うには.fetchall()
を、ループ前に入れる
なんとか解決できてよかったです。
情報が少なく、同じようなことで困っているけれどわからないって方がいたらと思って書きました。
最後までご覧いただきありがとうございました。
Author And Source
この問題について([Python3]SQLite3へUPDATEするときにループ(for)を使う方法), 我々は、より多くの情報をここで見つけました https://qiita.com/MoraCyulu/items/ff111d9d2dbd84b1cd57著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .