我有问题,在我的表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")
这怎么可能用最好的和简单的方法。
3条答案
按热度按时间sd2nnvve1#
你的
if
声明只是胡说八道。如果你想问的问题是“这张发票的状态是什么?“那么你需要:fetchall
将记录作为列表的列表返回,其中每行是字段的列表。我们用[0]拉取第一条记录。然后,search_inv_sta[0]
从该行获取第一个字段。qnzebej02#
我想更新时的状态是开放的,如果关闭,然后回滚。
目前还不清楚你实际上想要什么,特别是关于“回滚”。
您可能正在进行大规模更新,因此任何关闭的操作都将导致不执行任何操作,因此该列将显得多余。
你可以更新一个单独的行,实际上意味着只从打开切换到关闭。在这种情况下,所需做的就是在WHERE子句中包含对状态的检查
例如,也许可以沿着下列路线:
也许您的意思是,如果状态是关闭的,您希望状态集回滚,在这种情况下,可以使用CASE WHEN THEN END ELSE或其一部分表达式。
例如,也许沿着(标题似乎暗示的)的路线沿着:-
当然,对于你的问题,还有其他的解释,关于 * 我想更新 *。它可以是另一列,而不是要更新的状态列。然而,可以相应地调整已经说过的许多内容。
你可能需要考虑澄清你的问题。
63lcw9qa3#
我找到了最佳解决方案:
在这种情况下,我们使用'in'关键字来搜索python中的列表,元组和字典中的特定元素,任何SQL数据库,如MySQL,SQLite表行都在元组中。