如何使用sqlite python 2.7更新依赖于其他列值的多个记录的列

时间:2014-12-23 17:20:06

标签: python-2.7 sqlite

我正在编写一些代码来替换disco事件的手写寄存器,代码使用sqlite数据库来存储数据。 sqlite文件中的表有4列:Name,Reply,Time_in和Time_out。默认情况下,Timein / out为空,它们中没有任何内容。名称和回复通过csv文件导入。在事件结束时,如果人们没有“退出”,则代码的操作员按下一个按钮(使用tkinter)来更新剩余的记录。 sqlite文件中的数据如下所示:

Name Reply Time_in Time_out JoeBlogs Y

我希望代码更新所有具有Reply'Y'和time_in值但不是time_out值的记录。我试图用python 2.7

写这个
c.execute("UPDATE Table1 SET Time_out = TIME('now') WHERE Time_in IS NOT NULL AND Time_out ISNUll AND Reply = 'Y'")                 
conn.commit()

测试数据:

Name Reply Time_in Time_out JoeBloggs Y 20:40:44 JohnSmith N JohnBlogg Y JoeSmith Y 20:33:11 22:14:22

在更新语句之后,任何记录都没有变化,所以我也尝试过:

c.execute("UPDATE Table1 SET Time_out = TIME('now') WHERE Time_in IS NOT NULL AND Time_out ='' AND Reply = 'Y'")

conn.commit()

但是这只是覆盖了以前的Time_out值,即使有一个值,它只对回复Y执行此操作,这是向前迈出的一步。即。

Name Reply Time_in Time_out JoeBloggs Y 20:40:44 22:44:22 JohnSmith N JohnBlogg Y 22:44:22 JoeSmith Y 20:33:11 22:44:22

我希望在更新声明之后得到这个结果:

Name Reply Time_in Time_out JoeBloggs Y 20:40:44 22:44:22 JohnSmith N JohnBlogg Y JoeSmith Y 20:33:11 22:14:22

有人能指出我对这个问题的正确语法吗?

1 个答案:

答案 0 :(得分:1)

这是我提出的: c.execute("UPDATE Table1 SET Time_out = TIME('now') WHERE Time_in<>'' and Time_out=''")
conn.commit()