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 <[email protected]> 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...
> #[email protected] 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
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user