小编tji*_*jim的帖子

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

我在嵌套循环中的单个sqlite数据库上使用多个游标时遇到问题.我找到了一个适合我的解决方案,但它有限,我没有看到在线记录这个具体问题.我这样发布: - 一个明确的问题/解决方案可用 - 看看是否有更好的解决方案 - 也许我在sqlite3 python模块中发现了一个缺陷

情况就是这样:我的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()  
Run Code Online (Sandbox Code Playgroud)

结果很奇怪.该sqlite3表获取前两个记录的重复条目sharedConnections.他们有点整理.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  
Run Code Online (Sandbox Code Playgroud)

解决方案不完善.而不是使用迭代器从外循环光标,我myConnections,然后SELECT和遍历结果列表.由于我的数据集很小,这没关系.

curOuter = db.cursor()
curOuter.execute('SELECT * FROM myConnections'):
rows = curOuter.fetchall()
for row in rows: …
Run Code Online (Sandbox Code Playgroud)

python sqlite python-2.7

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

python ×1

python-2.7 ×1

sqlite ×1