【问题标题】:Python - Insert list of tuples into one column in SQLite [duplicate]Python - 将元组列表插入 SQLite 中的一列 [重复]
【发布时间】:2016-06-07 01:20:25
【问题描述】:

我研究了类似的链接,但仍然无法弄清楚。大多数其他链接都在尝试插入多行或多列,但我需要一列中的元组列表。

word_in_python = cat
listOfTuples = [('word1', 12), ('word2', 14), ('word3', 4), ('word5', 23)]

这是我的代码:

conn = sqlite3.connect('mydb.db')
c = conn.cursor()
c.execute("INSERT OR IGNORE INTO saved_words (word, data) VALUES (?, ?)", (word_in_python, [listOfTuples]))
conn.commit()
conn.close()

我需要 INSERT OR IGNORE 因为 word 列是唯一列,因此不应将重复的单词输入到数据库中。

我试过改成:

c.execute("INSERT OR IGNORE INTO saved_words (word, data) VALUES (?, ?)", (word_in_python, (listOfTuples, )))

c.executemany("INSERT OR IGNORE INTO saved_words (word, data) VALUES (?, ?)", (word_in_python, [listOfTuples]))

for each in listOfTuples:
  c.executemany("INSERT OR IGNORE INTO saved_words (word, data) VALUES (?, ?)", (word_in_python, (each[0], each[1]) ))

这些都不起作用。

我通常遇到的错误是:

Incorrect number of bindings supplied. The current statement uses 2, and there are 5 supplied.

我也对这个错误感到困惑。我知道我的执行行中的 (?, ?) 意味着我正在尝试输入 2 个绑定。我的元组列表中有 10 个元组,所以我不确定提供的 5 个绑定来自哪里。

此外,我的 saved_words 表的数据列类型为 BLOB。我认为这最适合插入列表。

编辑

我想要的是 word_in_python (cat) 在一列和下一列 listOfTuples 中,这都在一行中。

【问题讨论】:

  • 什么是word_in_python
  • @alecxe 这是一个单独的字符串,我正在输入到另一列。在调试时,我测试了只将 word_in_python 插入数据库,它工作正常。我相信我的错误在于插入 listOfTuples。
  • 列表不是 blob。列表存储在数据库中时应该是什么样子?
  • @CL。列表的列应在一条记录和一列中包含整个列表。
  • SQLite 没有列表data type

标签: python sqlite


【解决方案1】:

不确定word_in_python 是什么,但将元组列表传递给executemany 的正确方法是:

c.executemany("INSERT OR IGNORE INTO saved_words (word, data) VALUES (?, ?)", listOfTuples))

在这种情况下,数据库驱动程序将使用元组项作为查询参数为列表中的每个元组执行一条语句 - word1 用于word12 用于data,然后word2 用于@987654329 @, 14 用于数据等。

【讨论】:

  • 我已编辑发布以解释 word_in_python。它实际上是一个单独的字符串,而不是元组中的第一个单词。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2020-02-20
  • 2021-11-02
  • 2020-07-14
  • 2019-03-27
  • 2020-12-06
  • 2022-11-21
相关资源
最近更新 更多