【发布时间】:2020-02-20 20:32:25
【问题描述】:
假设我有以下值的列表:
listA = [1,2,3,4,5,6,7,8,9,10]
我想使用 executemany 命令将此列表的每个值放在我的 SQLite 数据库中名为 formatteddate 的列中,而不是遍历整个列表并分别插入每个值。
如果我要插入多列数据,我知道该怎么做。例如,如果我必须插入 listA、listB、listC,那么我可以创建一个像 (listA[i],listB[i],listC[i]) 这样的元组。是否可以在没有循环的情况下插入一个值列表。还假设插入值是整数。
更新: 根据提供的答案,我尝试了以下代码:
def excutemanySQLCodewithTask(sqlcommand,task,databasefilename):
# create a database connection
conn = create_connection(databasefilename)
with conn:
cur = conn.cursor()
cur.executemany(sqlcommand,[(i,) for i in task])
return cur.lastrowid
tempStorage = [19750328, 19750330, 19750401, 19750402, 19750404, 19750406, 19751024, 19751025, 19751028, 19751030]
excutemanySQLCodewithTask("""UPDATE myTable SET formatteddate = (?) ;""",tempStorage,databasefilename)
仍然需要很长时间(大约 10 小时)。我在 tempStorage 中有 150,000 个项目。我试过 INSERT INTO 也很慢。似乎不可能制作一个整数元组列表。
【问题讨论】:
-
您是否有任何代码表明您尝试过此操作?
-
@EcSync 用代码更新了它。
-
请说明你想做什么。您想为每个值插入一个新行吗?如果是这样,表中是否只有一列名为“值”?如果还有其他列,它们是否接受 null?或者您想用这些新值更新现有行吗?如果是这样,您需要一个与每个值配对的主键值才能正确更新。此外,您在说明中指定了一个名为
values的列,但您的代码显示了一个名为formatteddate的列。总而言之,您打算做什么非常不清楚。 -
虽然这不是解决整体问题的方法,但请注意,运行不带 WHERE 子句限制行的 UPDATE 命令将更新表中的所有行。您拥有的代码本质上是用一个值更新所有表行,然后用另一个值替换所有格式化日期列,然后一遍又一遍地重复大约 150,000 次......所以最后,所有行都有相同的值,最后一个值在名单。 (列表中的所有其他值都将被覆盖。)
-
@CPerkins 我在 Python 中有一个带有整数的列表(它们是格式化的日期)。我已经有一个包含多列的表,并且所有行都有一些价值。我在名为
formatteddate的表中添加了一个新列。此新列具有空值。我想将列表中的值放入名为formatteddate的新列中。感谢您指出上述代码中的一些错误,但已修复。我只是忘了在这里修复它。首先,让我问你这个问题:INSERT 还是 UPDATE 哪个更好?我假设 INSERT 因为该列中没有现有值。 (续)
标签: python sql python-3.x sqlite