【问题标题】:How do I update a record in sqlite3 in python [duplicate]如何在python中更新sqlite3中的记录[重复]
【发布时间】:2021-09-06 15:13:37
【问题描述】:

这里,在更新部分创建了一个新的副本,而不是更新现有的记录。请帮忙!

def addBooks(title, quantity):
    c.execute('SELECT * FROM books')
    for i, j in c.fetchall():
        if i == title:
            c.execute('UPDATE books SET quantity = ? WHERE title = ?', (j+quantity, title))
            conn.commit()
        else:
            c.execute('INSERT INTO books VALUES (?, ?)', (title, quantity))
            conn.commit()

【问题讨论】:

  • 您的意思是将else: 附加到for 而不是if
  • 如果是这样,您需要在找到匹配行时从循环中break
  • 这就是为什么你会得到重复。对于具有不同标题的每一行,您将插入一个带有您正在搜索的标题的新行。
  • 如果标题已经在表格中,您是否尝试更新,如果没有,则插入?
  • 如果是这样,请参阅stackoverflow.com/questions/418898/…

标签: python sqlite


【解决方案1】:

我想你只是想在这里更新一下:

def addBooks(title, quantity):
    c.execute('UPDATE books SET quantity = quantity + ? WHERE title = ?', (quantity, title,))
    conn.commit()

您当前的代码存在多个问题。首先,在您的第一个(不必要的)选择中执行 SELECT * 在语义上是不正确的,因为您应该明确列出您想要的列。此外,无需从该选择中迭代结果集来更新每条记录。 UPDATE 已经是一个基于集合的操作,它将针对表中的每条记录。如果我了解您的要求,也无需在此处发送INSERT

【讨论】:

  • 谢谢,我会尝试验证我的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2018-02-17
  • 1970-01-01
  • 2013-12-05
  • 2013-01-26
  • 2021-04-14
相关资源
最近更新 更多