如何在 Python 中将从数据库中获取的数字与 sqlite3 进行比较?

How can I compare numbers fetched from a database with sqlite3 in Python?

提问人:Carlos González 提问时间:9/20/2023 更新时间:9/20/2023 访问量:51

问:

我在编程方面很陌生,我正在使用 sqlite3 使用 python 工作,我有一列对数字进行排序,但可能存在差距(1、2、4、7、8......我正在尝试做的是制作一个 For 循环,在该循环中,我按顺序 (ID) 比较数字,并消除间隙(1、2、3、4、5......

函数去

def deleteGaps(idTuple):

    idList = list(idTuple) #converting the fetched Tuple to a List to be able to modify it
    previousId=-1 # -1 because the first element is [0]

    for id in idList:     
        if id > previousId+1:
           id = previousId+1
           print(id) #Just for testing, later I'll work on the side of updating the table

    previousId = id

它给了我以下错误

    if id > previousId+1:
       ^^^^^^^^^^^^^^^^
TypeError: '>' not supported between instances of 'tuple' and 'int'

如果我去print(idList),它会给我“[(1,),(2,),(4,),(7,),(8,)]”而不是预期的“(1,2,4,7,8)”。这可能是问题的根源,但我不知道如何正确进行转换。

有什么建议吗?谢谢大家。

PS:我意识到我可以得到元组的长度并分配 1、2、3......到 n=length,但我想知道如何从 [(1,), (2,)] 到 (1, 2)。

python list sqlite 元组

评论

0赞 guidot 9/20/2023
一些备注:是内置函数的名称,不要用它来做别的事情。不建议在我所知道的任何语言中修改循环中的循环变量。您的打印语句似乎有错误的缩进。看一下这个函数,而不是试图用 来模拟它。idenumeratepreviousId
0赞 Carlos González 9/22/2023
谢谢,我会避免使用“id”。在这种循环中,修改循环变量似乎没有在列表中做任何事情,除非我用“givenList[i]”(作为“i”一个用作计数器的变量)保存更改。我来列举一下。谢谢

答:

0赞 H. Kürşat AKBURAK 9/20/2023 #1

您的代码 ıd 是元组,但您正在与 int 进行比较。 id = int(id) if id > previousId+1: id = previousId+1

你能试试这个吗

0赞 guidot 9/20/2023 #2

PS部分的部分答案:

flattened_tuple = tuple(x[0] for x in ((1,), (2,), (3,)))

收益 率。(1, 2, 3)

0赞 Abdulrahman Sheikho 9/20/2023 #3

我不明白你想做什么,但我可以修复你的错误:

那是因为 是 类型,你不能在 和 之间应用添加操作 您需要访问元组中的值,因此请尝试:idtuple+tupleint

def deleteGaps(idTuple):

    idList = list(idTuple) #converting the fetched Tuple to a List to be able to modify it
    previousId=-1 # -1 because the first element is [0]

    for id in idList:
        id = id[0] # using `[0]` means that you're accessing the tuple's first value
        if id > previousId+1:
           id = previousId+1
           print(id) #Just for testing, later I'll work on the side of updating the table

    previousId = id

注意:其类型是为了简化它,因为 SQLite3 查询的结果是idtupletuple

如果你不想使用和感觉到这总是看起来像,那么你可以做以下事情:[0]tuple(value,)

    for id, _ in idList:
        if id > previousId+1:
           id = previousId+1
           print(id) #Just for testing, later I'll work on the side of updating the table

    previousId = id