我正在制作一个python脚本,以从sqlite db中获取数据以获取网络路径。
我有两个类:节点,链接:
class node:
nodeName = str()
nodeType = str()
node1 = str()
node2 = str()
active = 0
def __init__(self, nodeID):
self.nodeID = nodeID
cursor = network.execute("SELECT linkID FROM link WHERE nodeA = ? OR nodeB = ?", (nodeID, nodeID,))
row1 = cursor.fetchone()
row2 = cursor.fetchone()
if row1:
self.link1 = link(row1[0])
if row2:
self.link2 = link(row2[0])
self.nodeName, selfsnodeType, self.active = network.execute("SELECT nodeName, nodeType, active FROM node WHERE nodeID = ?", (nodeID,)).fetchall()[0]
链接完全相同,只是它尝试获取两个节点子节点。如您所见,这创建了一个循环引用,但似乎深了三个层次,链接子项没有获得自己的节点子项,节点子项也没有获得链接子项。尝试读取值将返回None类型:
NODE object 67 getting link children:
(19,)
(48,)
link object 19 getting node childs:
(67,)
(112,)
NODE object 67 getting link children:
None
None
这是设计使然吗?
这是一个坏主意吗?
可以遍历孩子们吗?
最佳答案
是的,这是糟糕的设计。
您只需存储边缘即可构建图形。因此,您应该通过从数据库拉边来构建图形。
之后,或同时,您应该提取装饰节点(如果装饰边缘,则需要边缘)所需的信息。这不应触发任何尝试从数据库中获取有关边缘的信息(装饰性信息除外)的尝试。