我正在编写一些代码来替换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
有人能指出我对这个问题的正确语法吗?
答案 0 :(得分:1)
这是我提出的:
c.execute("UPDATE Table1 SET Time_out = TIME('now') WHERE Time_in<>'' and Time_out=''")
conn.commit()