【问题标题】:Inserting a list of value into SQLite column from python从python将值列表插入SQLite列
【发布时间】: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


【解决方案1】:

正如您所说,您需要一个元组列表。所以你可以这样做:

cursor.executemany("INSERT INTO my_table VALUES (?)", [(a,) for a in listA])

【讨论】:

  • 感谢您的帮助。我按照你的方法试过了,但还是太慢了。似乎一次插入一个值。
  • 正在一次插入一个值。 executemany() 为单个 SQL 参数 ? 单独传递的每个值重新运行相同的 SQL 语句。
  • 在sql, "INSERT..." 语句中,ListA被插入到哪一列?
猜你喜欢
  • 2019-03-27
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多