1

ネットワーク パスの sqlite db からデータを取得する python スクリプトを作成しています。ノード、リンクの 2 つのクラスがあります。

    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]

Link はまったく同じですが、2 つのノードの子を取得しようとします。ご覧のとおり、これにより循環参照が作成されますが、3 レベルの深さがあり、リンクの子はそれ自体のノードの子を取得せず、ノードの子はリンクの子を取得しません。値を読み取ろうとすると、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
  • この動作は設計によるものですか?
  • これは悪い考えですか?
  • 子供たちを反復することは可能ですか?
4

1 に答える 1

1

はい、これは悪い設計です。

グラフを作成するには、エッジを保存するだけです。したがって、データベースからエッジを取得してグラフを作成する必要があります。

その後、または同時に、ノード (およびエッジを装飾する場合はエッジ) を装飾するために必要な情報を取得する必要があります。これにより、エッジに関する情報 (装飾情報以外) をデータベースから取得しようとする試みはトリガーされません。

于 2012-05-22T18:43:51.457 に答える