【发布时间】:2018-02-22 21:18:10
【问题描述】:
我希望执行以下语句:
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()
【问题讨论】:
-
但是您仍然对它们进行了硬编码。
c.executemany('INSERT INTO artists (name, score) VALUES (?, ?)', scores) -
@roganjosh 这只是简单地执行多次插入(在 for 循环中执行)还是最近引入 sqlite 的“多次插入”?
-
您能否将我链接到您所指的内容?
-
您可以并且应该使用 python 中的 executemany,只需将其包装在事务中即可。另一种选择是将数据从 csv 加载到表中:stackoverflow.com/questions/14947916/import-csv-to-sqlite
-
@roganjosh stackoverflow.com/a/1609688/607846