比较Sq Lite 3 Python

时间:2014-11-28 01:10:17

标签: python database sqlite compare local

我有一个Sq Lite 3数据库,其中包含列ID,名称和时间。 所以我有最后一行并使用python放置在var LAST_PERSON中。

your_rank = "SELECT usr_name,time FROM rank WHERE ID = (SELECT MAX(ID)  FROM rank)"

我还有一个var ROW,它按时间顺序遍历每一行。

sql = "SELECT usr_name,time FROM rank ORDER BY time "

for row in cur.execute(sql):

我想比较一下:

  

your_rank,按时间排序,获得最后一个人的排名

我试过

        for row in cur.execute(sql):
        sql_list.append(row)
        if(row is your_rank):
            this_is_your_rank = rank_number
        rank_number += 1

但我不能使用Sq Lite 3的if语句,我无法找到任何比较这些的解决方案。你能点击一下吗?

如果你不能,谢谢你花时间阅读。

1 个答案:

答案 0 :(得分:1)

您想select count(ID) from rank where time < your_time或类似。

当您可以要求数据库为您提供所需的答案时,循环查看SQL结果以找出您想要的东西是笨重的。

编辑:

您的第一个查询,您将表连接到自身以获取具有最高ID的用户,可以是:

SELECT MAX(ID),usr_name,time FROM rank

您可以将它们组合在一起,以“获取最新的用户名,时间和位置”:

SELECT 
    MAX(ID),usr_name,time, (SELECT COUNT(ID)+1 FROM rank WHERE time < r.time) [Pos]
FROM
    rank r

再次编辑,好吧好的。不是“任何人都可以给我一个解决方案吗?”,我不清楚你的意思是“我不能使用if语句”,但这里有一些推测:

如果您实际键入row is your_rank,假设您实际执行了your_rank SQL查询并将结果保存在同一变量名称的顶部,那么它会失败,因为is是用于测试的Python关键字是否两件事是同一件事(也就是说,有一件事有两个名字)。它不测试两个单独的事物是否具有相同的值==是相等测试。

它也可能失败,因为SQL查询的结果实际上是元组列表。每个row都是一个元组,并且根据您将结果放在your_rank中所做的操作,它们在比较时不会匹配。

如果您想保持相同的方法,这可能会有效:

last_user = cursor.execute('select max(id),usr_name,time from rank').fetchone()

last_user_rank = 1
for row in cursor.execute('select id,usr_name,time from rank order by time asc'):
    if last_user[2] > row[2]:
        last_user_rank += 1
    else:
        break

print last_user, last_user_rank