0

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

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
4

3 回答 3

2

错误列表:commit() 不提交,因为它是一种方法“插入单词(单词)值(?)”,(单词,)不是“插入单词(单词),值(?)”,(单词)

正确的代码是:

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()

别担心,快乐的编码

于 2019-11-17T13:24:57.540 回答
0

我猜你会得到一个错误,因为你不能将单个项目放在括号中以使其成为一个元组 - 所以(word)不是要走的路。它应该是其中之一(无论哪个对您来说更易读):

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

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

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

这将使worda 中的唯一元素list

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

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

于 2019-11-17T13:22:12.990 回答
0

最简单的方法是使用 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()
于 2019-11-17T13:29:55.623 回答