【问题标题】:Compare in Sq Lite 3 Python在 Sq Lite 3 Python 中进行比较
【发布时间】:2015-01-26 15:21:17
【问题描述】:

我有一个 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 语句,也找不到任何解决方案来比较这些。谁能给我点一下?

如果您不能,感谢您抽出宝贵时间阅读。

【问题讨论】:

  • 您的 python 代码没有正确缩进,因此无效。您没有正确描述您想要实现的目标。很可能它可以用一条 SQL 语句来完成,但不可能知道是哪一条,因为你没有解释你要做什么。

标签: python database sqlite compare local


【解决方案1】:

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

当你可以要求数据库给出你想要的答案时,循环遍历 SQL 结果来找出你想要的结果是很笨重的。

编辑:

您的第一个查询可以是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2015-03-30
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多