如果否则在sqlite数据库更新查询中使用

问题描述 投票:0回答:1

我的表 cloum 名称状态有问题,有两种可能的条件状态“打开”和状态“关闭”。 我想在状态打开时更新,如果关闭则回滚。

con6=sqlite3.connect("inv_clossing_datail_1.db")
cur6=con6.cursor()
cur6.execute(''' SELECT * FROM inv_closing_db WHERE Invoice_no = {}         '''.format(int(inv_sta2_e2.get())))
#cur6.execute(''' SELECT EXISTS(SELECT 1 FROM inv_closing_db WHERE Invoice_no = {} '''.format(int(inv_sta2_e2.get())))
search_inv_sta = cur6.fetchall()

if ('Status == "Closed" ')  in search_inv_sta:
    print("Alredy Closed This Invoice")
else:
    print("This Invoice is OPEN NOT CLOSED")

这如何以最好、最简单的方式实现。

python sqlite
1个回答
0
投票

我想在状态打开时更新,如果关闭则回滚。

目前尚不清楚您真正想要什么,特别是在“回滚”方面。

  • 在 SQLite 中,回滚通常是在进行事务时执行,但这本身就是一次执行,并且将根据程序逻辑决定是否执行提交或回滚语句;当也许只需要更新需要更新的内容时。

您可能正在进行批量更新,因此任何关闭都将导致什么也不做,因此该列看起来是多余的。

您可以更新一行,实际上意味着仅从打开状态切换到关闭状态。在这种情况下,更新所需的只是在 WHERE 子句中包含对状态的检查

例如也许是这样的:-

UPDATE inv_closing_db SET status = 'closed' WHERE status = 'open';

也许您的意思是,如果状态已关闭,您希望状态集回滚,在这种情况下,可以使用 CASE WHEN THEN END ELSE 或其一部分表达式。

例如也许沿着(标题似乎暗示的意思):-

UPDATE inv_closing_db SET status = CASE status WHEN 'open' THEN 'closed' WHEN 'closed' THEN 'rollback' ELSE status END;
  • 在这两个示例中,设置的列不必是状态列,并且可以用表达式替换该值(该表达式本身可以包含 CASE WHEN THEN ELSE END 表达式)。

当然,关于我想要更新,您的问题的解释还有其他排列。它可能是另一列,而不是您要更新的状态列。然而,大部分内容都可以进行相应调整。

您可能需要考虑澄清您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.