如何在Python中使用sqlite3比较从数据库中获取的数字?

wfveoks0  于 2023-10-23  发布在  SQLite
关注(0)|答案(3)|浏览(173)

我是一个编程新手,我正在用python和sqlite3工作,我有一个列,其中的数字是有序的,但可能有间隙(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=lenght,但我想知道如何从[(1,),(2,)]到(1,2)。

x759pob2

x759pob21#

你的代码<$d是元组,但你正在与int进行比较。id = int(id) if id > previousId+1: id = previousId+1
你能试试这个吗

vnjpjtjt

vnjpjtjt2#

PS部分的部分答案:

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

得到(1, 2, 3)

szqfcxe2

szqfcxe23#

我不明白你想做什么,但我可以修复你的bug:
这是因为id的类型是tuple,你不能在tupleint之间应用add操作+你需要访问元组中的值,所以尝试:

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

注意:id的类型为tuple * 以简化它 *,因为sqlite3查询的结果是tuple
如果你不想使用[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

相关问题