I am trying to model graph data structure where nodes can be connected
by different types of edges.
For example, we could have 2 nodes represnting persons: "Alice" and
"Bob" and we could have 3 nodes representing projects: "projectA",
"projectB", "projectC".
Alice is working on projectA and projectC.
Bob is working on projectB and projectC.
Alice is manager of projectA.
Bob is manager of projectB.
I would like to encode all this in 2 database tables:
Node table:
id name
1 Alice
2 Bob
3 projectA
4 projectB
5 projectC
Edge table:
n1_id n2_id edge_type
1 3 working_on
1 5 working_on
2 4 working_on
2 5 working_on
1 3 manager_of
2 4 manager_of
(it would even by better to replace the edge_type by an edge_type_id
and move them to a separate table, but I would already be very happy
to get it to work like this)
and I would like to be able to access all this as a dictionary of
lists (or sets):
>>> alice = session.query(Node).filter_by(name="Alice").first()
>>> bob = session.query(Node).filter_by(name="Bob").first()
>>> alice.related['working_on']
[<Node: 'projectA'>, <Node: 'projectC'>, ]
>>> bob.related['working_on']
[<Node: 'projectB'>, <Node: 'projectC'>, ]
>>> alice.related['manager_of']
[<Node: 'projectA'>, ]
>>> bob.related['manager_of']
[<Node: 'projectB'>, ]
and adding stuff:
>>> alice.related['working_on'].append(Node("projectD"))
>>> alice.related['working_on']
[<Node: 'projectA'>, <Node: 'projectC'>, <Node: 'projectD'>, ]
I think this must be doable using the association_proxy in some way
(it's vaguely familiar to the Broker/Stock/Holding example in the
documentation, but now the extra value in the linking table (shares)
should be used as key in the dictionary) but I can't get it to work.
Could somebody give me an idea if this is at all possible and maybe a
push in the right direction?
Many thanks,
Jan.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.