我希望执行以下声明:
c.execute('INSERT INTO artists (name, score) VALUES("Buddy Rich", 10), ("Candido", 9), ("Charlie Byrd", 8);')
但不是像上面那样硬编码值,而是将它们放在变量中:
scores = (("Buddy Rich", 10), ("Candido", 9), ("Charlie Byrd", 8))
如何将scores
与execute()
一起使用,其中scores
可以包含任意数量的值?
更新
我希望能够保证,如果将数据插入表中,即使程序崩溃,也会插入所有数据或不插入任何数据。如果在运行executemany
时程序崩溃,是否存在只添加部分行的风险?
例如,这是否只会导致添加一些行:
try:
c.executemany('INSERT INTO artists (name, score) VALUES (?, ?)', scores)
except:
c.commit()
答案 0 :(得分:1)
要将事物放入事务中,您应该使用游标,并且如果引发异常则返回一个try块。
import sqlite3
scores = (("Buddy Rich", 10), ("Candido", 9), ("Charlie Byrd", 8))
con = sqlite3.connect(':memory:')
try:
cur = c.cursor()
cur.execute('create table artists (name text primary key, score int)')
cur.executemany('INSERT INTO artists (name, score) VALUES (?, ?)', scores)
con.commit()
except:
con.rollback()
答案 1 :(得分:0)
您可以使用executemany
:
scores = (("Buddy Rich", 10), ("Candido", 9), ("Charlie Byrd", 8))
c.executemany('INSERT INTO artists (name, score) VALUES (?, ?)', scores)