我正在尝试比较一个局部变量
currentTime = time.time()
使用我的表中的数据,在AuthorID列下,查看哪个值更大。然后,我将继续将“Reminded”列更新为True。我的表名为reminderFormat。
数据库的外观如下:http://prntscr.com/gb9ay1
最好的方法是什么?我相信我可以专门获取FutureTime并将其存储为变量,然后将其与currentTime进行比较。但是,是否有更好的选择,使用查询更快更有效?
由于
答案 0 :(得分:1)
我认为,最佳做法是使用单个SQL语句来更新记录。
由于SQLite has no boolean value,您需要设置值 1 (而不是True)。
例如,声明可能是:
import time
st = "UPDATE reminderFormat SET Reminded = 1 " \
"WHERE FutureTime <= {currentTime}".format(currentTime=time.time())
编辑:演示
这是一个演示:
import time
import sqlite3
records = [
(20183740995, 1503330725.0, "testtt", 0),
(20183740995, 1503330732.0, "testtt", 0),
(20183740995, 1503331334.0, "testtt", 0),
(20183740995, 1509999999.0, "testtt", 0),
]
con = sqlite3.connect(":memory:")
# Create the table
con.execute("create table reminderFormat(AuthorID, FutureTime, Message, Reminded)")
# Fill the table
con.executemany("INSERT INTO reminderFormat(AuthorID, FutureTime, Message, Reminded) VALUES (?, ?, ?, ?)", records)
curr_time = time.time()
con.execute("UPDATE reminderFormat SET Reminded = 1 WHERE FutureTime <= ?", (curr_time,))
# Print the table contents
for row in con.execute("SELECT AuthorID, FutureTime, Reminded FROM reminderFormat"):
print(row)
你得到:
(20183740995, 1503330725.0, 1)
(20183740995, 1503330732.0, 1)
(20183740995, 1503331334.0, 1)
(20183740995, 1509999999.0, 0)
答案 1 :(得分:-2)
在sqlite3中,您可以在查询中使用Case
语句检查当前时间是否小于或大于AuthorID
,因此您在sqlite3中的查询将是这样的:
select case AuthorID<Futuretime then 1 else 0 end from table;
这应该在列中为您提供1
和0
,而无需获取python的时间。