当前位置: 首页 > 面试题库 >

在来自python-2.7的sqlite3中的嵌套循环中使用多个游标

潘飞英
2023-03-14
问题内容

我在嵌套循环内的单个sqlite数据库上使用多个游标时遇到了问题。我找到了一个适合我的解决方案,但是它的功能有限,而且我还没有看到在线记录此特定问题。我这样发布:

  • 明确的问题/解决方案可用
  • 看看是否有更好的解决方案
  • 也许我在sqlite3python模块中发现了一个缺陷

我的Python应用程序将社交关系数据存储在sqlite中。数据集包括两个表之间的一对多关系:myConnections和sharedConnections。前者每个连接都有一行。sharedConnections表具有0:N行,具体取决于共享的连接数量。为了构建结构,我使用了一个嵌套循环。在外部循环中,我访问myConnections中的每一行。在内部循环中,我填充了sharedConnections表。代码如下:

curOuter = db.cursor()  
for row in curOuter.execute('SELECT * FROM myConnections'):    
    id  = row[0]  
    curInner = db.cursor()  
    scList = retrieve_shared_connections(id)  
    for sc in scList:  
        curInner.execute('''INSERT INTO sharedConnections(IdConnectedToMe, IdShared) VALUES (?,?)''', (id,sc))  
db.commit()

结果很奇怪。该sharedConnections表为中的前两个记录获取重复的条目myConnections。他们有点整理。A的连接,B的连接,然后是A,然后是B。初始口吃后,处理正确!例:

myConnections
-------------
a   
b  
c  
d

sharedConnections
-------------
a->b  
a->c  
b->c  
b->d  
a->b  
a->c  
b->c  
b->d

解决方案是不完善的。然后,而不是从外部循环游标使用迭代器SELECT,然后fetchall()遍历结果列表。由于我的数据集很小,所以可以。

curOuter = db.cursor()
curOuter.execute('SELECT * FROM myConnections'):
rows = curOuter.fetchall()
for row in rows:    
    id  = row[0]
    curInner = db.cursor()
    scList = retrieve_shared_connections(id)
    for sc in scList:
        curInner.execute('''INSERT INTO sharedConnections(IdConnectedToMe, IdShared) VALUES (?,?)''', (id,sc))
db.commit()

你有它。在嵌套循环内对同一sqlite数据库中的不同表使用两个游标似乎无效。而且,它不会失败,只会给出奇怪的结果。

  • 这真的是最好的解决方案吗?
  • 有更好的解决方案吗?
  • 这是应该解决的缺陷吗?

问题答案:

您可以建立一个行列表以插入内部循环,然后在循环外部插入cursor.executemany()。这不能回答多光标问题,但对您来说可能是一种解决方法

curOuter = db.cursor()
rows=[]
for row in curOuter.execute('SELECT * FROM myConnections'):    
    id  = row[0]    
    scList = retrieve_shared_connections(id)  
    for sc in scList:

        rows.append((id,sc))
curOuter.executemany('''INSERT INTO sharedConnections(IdConnectedToMe, IdShared) VALUES (?,?)''', rows)  
db.commit()

更好的是,仅从myConnections中选择ID:

curOuter.execute('SELECT id FROM myConnections')


 类似资料:
  • 本文向大家介绍在Python的while循环中使用else以及循环嵌套的用法,包括了在Python的while循环中使用else以及循环嵌套的用法的使用技巧和注意事项,需要的朋友参考一下 循环使用 else 语句 在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况

  • 问题内容: 我需要在Robot框架中创建一个嵌套循环。你能帮我吗? 我需要一个嵌套循环,将所有循环与文件中的所有循环进行比较。 提前致谢 问题答案: RF中没有嵌套循环;这只能通过在外部的内部循环调用一个关键字来完成。 不过,在您的特定情况下,可以不使用它-因为您想匹配整行,所以可以通过“应包含”来实现: 如果您要进行部分比赛-即成为会员的一部分,那么就不可能这样。

  • 我用C写了一个brainfuck解释器。这个程序有链表的实现,链表存储brainfuck指令,堆栈存储brainfuck的“[”指令。 我认为我的程序并不是在所有情况下都支持嵌套循环。这很荒谬,但这个brainfuck程序可以正确地使用我的Interpeter并打印“Hello World!”到stdout: 但该程序无法正常工作,并将内存错误打印到标准输出: 这两个例子适用于在线中断器-http

  • Python 不仅支持 if 语句相互嵌套,while 和 for 循环结构也支持嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,甚至 while 中有 for 或者 for 中有 while 也都是允许的。 当 2 个(甚至多个)循环结构相互嵌套时,位于外层的循环结构常简称为 外层循环或 外循环,位于内层的循环结构常简

  • 问题内容: 您如何在Python中说两个嵌套循环的父循环? 我知道您可以在大多数情况下避免这种情况,但是可以在Python中完成吗? 问题答案: 摆脱内循环(如果之后没有其他东西) 将外部循环的主体放入函数中并从函数返回 引发异常并在外部捕获它 设置一个标志,从内部循环中断开并在外部级别对其进行测试。 重构代码,因此您不再需要这样做。 我每次都会带着5。

  • 我用For创建了一个嵌套循环,这是程序代码和输出,然后我尝试了同时循环,得到了不同的结果 对于 虽然 请引导我。。谢谢