gpt4 book ai didi

python - 在 Python 中,什么会导致 for 循环的值随机倒退?

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:10 25 4
gpt4 key购买 nike

什么会导致迭代器在循环中向前移动,然后向后移动?

这是我用来遍历表的主键字段的代码。主键用于在单独的表中填充初始值。

For循环:

for row in sampleDB.select_fromTable():
print row[0]
sampleDB.insert_toTable(row[0], 2.0)

sqllite 插入语句:

def insert_toTable(self, primaryKey, initial):
c = self.conn.cursor()
c.execute('insert into insert_toTable VALUES(?, ?)', (primaryKey, initial))
if c.rowcount == 1:
print "Updated row.\n"
else:
print "Row does not exist.\n"

self.conn.commit()
c.close()

创建要循环的元组的 select 语句:

def select_fromTable(self):
c = self.conn.cursor()
c.execute('select * from sampleTable')

c.close

return c

这是一个示例表:

Primary Key     Text
0 John
1 Sue
2 Bill
3 Tyler

在没有插入语句的情况下运行循环会打印每个唯一键一次,但是如果我添加对插入函数 (insert_toTable) 的调用,我会遇到这种现象:

0
Updated row.

1
Updated row.

0
Traceback (most recent call last):
sqlite3.IntegrityError: column urlid is not unique

循环的下一次迭代应该是唯一值“2”而不是返回“0”......

如果需要,我可以提供更多的代码部分。

最佳答案

我怀疑这段代码的结果可能会根据使用的 sqlite 和 python 的确切版本而改变。

请注意,您在 select_fromTable 方法中对 c.close 的调用应该是 c.close()。这是一个幸运的错误,因为您不能在游标关闭后迭代查询结果。但是,结果是循环中有两个打开的游标。

尝试将您的 select_fromTable 方法更改为:

def select_fromTable(self):
c = self.conn.cursor()
c.execute('select * from sampleTable')
results = c.fetchall()
c.close()
return results

看看会发生什么。我相信它会解决您的问题。

关于python - 在 Python 中,什么会导致 for 循环的值随机倒退?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com