如何在 sqlite 中从此循环插入数据

How can I insert data from this loop in sqlite

我正在尝试从与此类似的循环中插入数据。

import sqlite3
conn = sqlite3.connect('database.db')
c = conn.cursor()

words = ["apple", "banana", "cherry"]
for word in words:
     c.execute("insert into Words (word), values (?)",(word))
     print(word) 
     conn.commit

c.close()
conn.close()

预期结果与此类似:

我收到一个错误。但是我不确定如何正确地正确格式化这段代码。

错误:

Traceback (most recent call last):
  File "file.py", line 7, in <module>
    c.execute("insert into Words (word), values (?)",(word))
sqlite3.OperationalError: near ",": syntax error

我猜您遇到了一个错误,因为您不能将单个项目放在括号中以使其成为元组 - 所以 (word) 不是正确的选择。它应该是其中之一(以您更易读的为准):

c.execute("insert into Words (word) values (?)",(word,))

注意在 word 之后插入的逗号使其成为一个元组。或者:

c.execute("insert into Words (word) values (?)",[word])

这将使 word 成为 list

中的唯一元素

您可以在控制台中亲眼看到 ('hello') 之类的操作不等于 ('hello',)。第一个仍然是一个字符串,第二个是一个元组(这是您的命令中需要的)。

编辑:此外,您在该命令中有一个不应该存在的逗号

错误列表: commit() 不提交,因为它是一个方法 "insert into Words (word) values (?)",(word,) 不是 "insert into Words (word), values (?)",(word)

正确的代码是:

import sqlite3
conn = sqlite3.connect('database.db')
c = conn.cursor()

words = ["apple", "banana", "cherry"]
for word in words:
    c.execute("insert into Words (word) values (?)",(word,))
    print(word) 
conn.commit()
conn.close()

别担心,编码愉快

最简单的方法是使用 f-string:

c.execute(f"INSERT INTO Words (word), values ({word})")

这更容易阅读 :) 但需要 python 3.6+

import sqlite3

with sqlite3.connect('database.db') as conn:
    c = conn.cursor()

    words = ["apple", "banana", "cherry"]
    for word in words:
         c.execute(f"INSERT INTO Words (word), values ({word})")
         print(word) 
         conn.commit()