使用executemany的其他表中的数据更新列

2024-04-23 04:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张桌子:

  • 带有framenumINT和characterSTRING的汉字
  • learnAlgframenumINT和framekanjiSTRING

framekanji当前每行中都有值'NULL',必须用汉字字符填充相同的framenum。例如,必须在表learnAlg中填写来自表Kanji的二(2,“二”),其中framenum=2。你知道吗

以下代码起作用:

c.execute("SELECT MAX(rowid) FROM learnAlg")
max = c.fetchone()[0]

for fn in range(max):
    fn += 1
    # !! Add framekanji !!
    c.execute("UPDATE learnAlg SET framekanji=(SELECT character FROM Kanji WHERE "
              "framenum = learnAlg.framenum) WHERE framenum = ?", (fn,))

问题

我想知道是否也可以用类似于以下代码的代码更新1 go中的每一行:

c.executemany("UPDATE learnAlg SET framekanji=(SELECT character FROM Kanji WHERE "
              "framenum = learnAlg.framenum) WHERE framenum = self")

但是,这会导致错误:“TypeError:函数正好接受2个参数(给定1个)”


Tags: 代码fromexecuteupdatewhereselectmaxfn
1条回答
网友
1楼 · 发布于 2024-04-23 04:34:13

executemany()用于使用不同的参数集多次执行同一SQL语句。 在本例中,如果要单独更新每个帧,则将使用此选项:

c.executemany("UPDATE ... WHERE framenum = ?",
              [(fn + 1,) for fn in range(max)])

但是,要运行单个SQL语句,只需使用execute()。 SQL没有self;可以使用framenum = framenum,也可以省略WHERE子句:

c.execute("""UPDATE learnAlg
             SET framekanji = (SELECT character
                               FROM Kanji
                               WHERE framenum = learnAlg.framenum);""")

相关问题 更多 >