Tom, I just installed the python bindings and tried this very simple setup to create a database and populate it within a transaction:
#!/usr/bin/env python import sys, random, csv from time import sleep from random import randint import neo4j graphdb = neo4j.GraphDatabase("db") with graphdb.transaction: person = graphdb.node(name="Person") peter = graphdb.node(name="Peter") peter.IS_A(person) print peter['name'] graphdb.shutdown() If you try this, is that working for you? Cheers, /peter neubauer COO and Sales, Neo Technology GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. On Tue, Jul 27, 2010 at 5:25 PM, Tom Smith <tas...@york.ac.uk> wrote: > Hello, > > I really like the look of neo4j and would like to use it in a project I'm > working on http://pppeoplepppowered.blogspot.com/ . > > I'm new to graphs and how to work with them, it's all new, but really drawn > to them having banged my head on SQL schemas for years (and years). My > problem with working with python neo4j is that there aren't enough simple > (enough) examples. This is sort of thing is great ... > http://blog.neo4j.org/2010/03/modeling-categories-in-graph-database.html ... > but it doesn't explain a few things and goes wrong in places. For example, > from the example, if I try to execute... > > computers_node = graphdb.node(Name="Computers") > > ... I get... > > jpype._jexception.RuntimeExceptionPyRaisable: > org.neo4j.graphdb.NotInTransactionException: No transaction found for current > thread > > So I need to add... > > with db.transaction: > computers_node = graphdb.node(Name="Computers") > > ... which raises the issue of transactions and database connections. I'm > unsure when to use transactions and how to use connections. Either way, I > regularly seem to bump into a... > > jpype._jexception.RuntimeExceptionPyRaisable: > org.neo4j.kernel.impl.transaction.TransactionFailureException: Could not > create data source [nioneodb], see nested exception for cause of error > > Because I like to use the interpreter and learn what objects can do, and > later create .py files and import them. It's not clear if I can have more > than one db connection open at once, or I should open and shutdown the > database everytime... or is it better to have one database connection hanging > around in a file somewhere? > > At the moment I'm trying to create a script that, takes a csv file of people, > adds them, then tries to get the data out somehow, like this... > >>> import stuff.neo_utils as neo # see below >>> neo.import_people() #import a csv > 7051 #the id of the root_person >>> neo.people(7051) #get the people out via the root_person > #nothing! >>>neo.people(8224) # the id of the last_person > <Node id=7051> > > My question is this... am I doing it all wrong? Could someone create a very > simple example that say, populates a graph, gets data out, manipulates that > data and then searches that data (say for an attribute, or to see if it > exists etc) in a single python file? So that I can begin to build up my > understanding, > > thanks for listening, > > tom > > > > > > #!/usr/bin/env python > > import sys, random, csv > from time import sleep > from random import randint > > import neo4j > > > class Person(neo4j.Traversal): > types = [ neo4j.Outgoing.is_a ] > order = neo4j.BREADTH_FIRST > stop = neo4j.STOP_AT_END_OF_GRAPH > returnable = neo4j.RETURN_ALL_BUT_START_NODE > > def people(person_root_id ): > try:graphdb.shutdown() > except:pass > > graphdb = neo4j.GraphDatabase( "neo_db" ) > with graphdb.transaction: > person_root = graphdb.node[person_root_id] > > for person_node in Person(person_root): > try: > print "%s %s (@depth=%s)" % ( person_node['family_name'], > person_node['email'],person_node.depth) > except: > print person_node > > graphdb.shutdown( ) > > # The data is like this... > #tas...@york.ac.uk Staff Mr T Smith |Computing Service: | |Vanbrugh College > V/C/011| |+44 1904 433847| > https://www.york.ac.uk/directory/user.yrk/searchdetail.cfm?scope=staff&ref=M95%27%22%3DYBD8%5B%3ANEJ%27S%27I%2AX%20%20F%2D6Y2%3D%20SR%21A%409%2C%40E2%3D%205%2EFMOM6A%3A%3EWIHV4T%5D%5E%3B%0A%2B4%2D%2A%3EG%2D%2F6EUS%22BI0%20%0A&referrer=searchResults > > def import_people(name="Untitled", > file='/Users/tomsmith/pppeoplepppowered/staff/staff.csv', ): > 'load a lot of people into the database, connecting each to a root > "Person" object by a "is_a" relationship, spurious I know ' > graphdb = neo4j.GraphDatabase( "neo_db" ) > with graphdb.transaction: > person_root = graphdb.node(name="Person") # create a root node of sorts > person_root_id = person_root.id > > csvReader = csv.reader(open(file), delimiter=' ', quotechar='|') > for row in csvReader: > email = row[0] > kind = row[1] > title = row[2] > given_name = row[3] > family_name = row[4] > department = row[5] > org_path = row[6] > full_address = row[7] > telephone = row[8] > src = row[9] > url = row[10] > external_url = row[11] > > person = graphdb.node(email=email,title=title, > > given_name=given_name,family_name=family_name, > telephone=telephone,department=department, > org_path=org_path,src=src, url=url, > external_url=external_url) > person.is_a( person_root ) > print person, "created and linked" > print "done importing!" > > graphdb.shutdown( ) > return person_root_id > > > > > > > > > > > > > > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user