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

y4ekin9u  于 2023-10-23  发布在  SQLite
关注(0)|答案(3)|浏览(155)

我有问题,在我的表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")

这怎么可能用最好的和简单的方法。

sd2nnvve

sd2nnvve1#

你的if声明只是胡说八道。如果你想问的问题是“这张发票的状态是什么?“那么你需要:

cur6.execute('SELECT Status FROM inv_closing_db WHERE Invoice_no = ?', (int(inv_sta2_e2.get()),)
search_inv_sta = cur6.fetchall()[0]

if search_inv_sta[0] == "Closed":
    print("Alredy Closed This Invoice")
else:
    print("This Invoice is OPEN NOT CLOSED")

fetchall将记录作为列表的列表返回,其中每行是字段的列表。我们用[0]拉取第一条记录。然后,search_inv_sta[0]从该行获取第一个字段。

qnzebej0

qnzebej02#

我想更新时的状态是开放的,如果关闭,然后回滚。
目前还不清楚你实际上想要什么,特别是关于“回滚”。

  • 在SQLite中,回滚通常是在进行事务时执行,但这是它自己权限内的执行,且将根据关于是执行提交语句还是执行回滚语句的程序逻辑;当可能只需要更新需要更新的东西时。

您可能正在进行大规模更新,因此任何关闭的操作都将导致不执行任何操作,因此该列将显得多余。
你可以更新一个单独的行,实际上意味着只从打开切换到关闭。在这种情况下,所需做的就是在WHERE子句中包含对状态的检查
例如,也许可以沿着下列路线:

UPDATE inv_closing_db SET status = 'closed' WHERE status = 'open' /* other conditions if need be */;

也许您的意思是,如果状态是关闭的,您希望状态集回滚,在这种情况下,可以使用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表达式)。

当然,对于你的问题,还有其他的解释,关于 * 我想更新 *。它可以是另一列,而不是要更新的状态列。然而,可以相应地调整已经说过的许多内容。
你可能需要考虑澄清你的问题。

63lcw9qa

63lcw9qa3#

我找到了最佳解决方案:
在这种情况下,我们使用'in'关键字来搜索python中的列表,元组和字典中的特定元素,任何SQL数据库,如MySQL,SQLite表行都在元组中。

cur6.execute(''' SELECT * FROM inv_closing_db WHERE Invoice_no = {} '''.format(int(inv_sta2_e2.get())))
                    
                    
                    search_inv_sta = cur6.fetchall()[0]
                    if ("Closed" in search_inv_sta):
                    
                                
                                print("Alredy Closed This Invoice")
                    
                    else:
                                print("This Invoice is OPEN NOT CLOSED")

相关问题