SQLITE3如何快速有效地查询这个?

时间:2017-08-21 16:22:53

标签: python sqlite

我正在尝试比较一个局部变量

currentTime = time.time()

使用我的表中的数据,在AuthorID列下,查看哪个值更大。然后,我将继续将“Reminded”列更新为True。我的表名为reminderFormat。

数据库的外观如下:http://prntscr.com/gb9ay1

最好的方法是什么?我相信我可以专门获取FutureTime并将其存储为变量,然后将其与currentTime进行比较。但是,是否有更好的选择,使用查询更快更有效?

由于

2 个答案:

答案 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;

这应该在列中为您提供10,而无需获取python的时间。