I finally figured out that you're not supposed to pass a tuple or list :)
Pass a string of the above and it's good to go. You also have to do UPSERT
RETURN AFTER
On Wednesday, July 15, 2015 at 4:01:19 PM UTC-7, Josh Harrison wrote:
>
> Hi all,
> I have a bunch of vertices and edges to insert into orientDB, hopefully
> using pyorient.
>
> I've got a bunch of parent vertices, let's call them documents. Then I
> have a bunch of metadata vertices that are shard amongst the documents.
>
> If I have a collection of records that look like:
> {"document_id":"abc123", "metadata":"good", "weight":0.1}
> {"document_id":"abc124", "metadata":"bad", "weight":0.3}
> {"document_id":"abc125", "metadata":"ugly", "weight":0.2}
> {"document_id":"abc126", "metadata":"good", "weight":0.6}
> {"document_id":"abc127", "metadata":"good", "weight":0.3}
> {"document_id":"abc128", "metadata":"good", "weight":0.74}
> {"document_id":"abc129", "metadata":"ugly", "weight":0.2}
>
> I have a document class and a metadata "V" type class created.
>
>
> I see the following in the pyorient documentation
>
> cmd = ("begin;"
> "let a = create vertex set script = true;"
> "let b = select from v limit 1;"
> "let e = create edge from $a to $b;"
> "commit retry 100;")
>
> edge_result = self.client.batch(cmd)
>
>
> What I'd ultimately like to be able to do is something like:
>
>
> - for each record
> - Insert document if document_id doesn't exist, capture ID in
> either case
> - Insert metadata name id metadata name doesn't exist, capture ID,
> in either case
> - Insert edge with weight "weight" between document and metadata ID
>
> >>> documents = [{"document_id":"abc123", "metadata":"good", "weight":0.1},
> ... {"document_id":"abc124", "metadata":"bad", "weight":0.3},
> ... {"document_id":"abc125", "metadata":"ugly", "weight":0.2},
> ... {"document_id":"abc126", "metadata":"good", "weight":0.6},
> ... {"document_id":"abc127", "metadata":"good", "weight":0.3},
> ... {"document_id":"abc128", "metadata":"good", "weight":0.74},
> ... {"document_id":"abc129", "metadata":"ugly", "weight":0.2}]
> ...
> >>> cmdlist = ["begin;"]
> >>> for doc in documents:
> ... cmdlist.append("let a = UPDATE doc_test SET doc_id='%s' UPSERT
> WHERE doc_id='%s';"%(doc["document_id"],doc["document_id"]))
> ... cmdlist.append("let b = UPDATE meta_test SET name='%s' UPSERT
> WHERE name='%s';"%(doc["metadata"],doc["metadata"]))
> ... cmdlist.append("let e = CREATE edge from $a to $b SET
> weight=%s;"%(doc["weight"],))
> ...
> >>> cmdlist
> ['begin;', "let a = UPDATE doc_test SET doc_id='abc123' UPSERT WHERE
> doc_id='abc123';", "let b = UPDATE meta_test SET name='good' UPSERT WHERE
> name='good';", 'let e = CREATE edge from $a to $b SET weight=0.1;', "let a
> = UPDATE doc_test SET doc_id='abc124' UPSERT WHERE doc_id='abc124';", "let
> b = UPDATE meta_test SET name='bad' UPSERT WHERE name='bad';", 'let e =
> CREATE edge from $a to $b SET weight=0.3;', "let a = UPDATE doc_test SET
> doc_id='abc125' UPSERT WHERE doc_id='abc125';", "let b = UPDATE meta_test
> SET name='ugly' UPSERT WHERE name='ugly';", 'let e = CREATE edge from $a to
> $b SET weight=0.2;', "let a = UPDATE doc_test SET doc_id='abc126' UPSERT
> WHERE doc_id='abc126';", "let b = UPDATE meta_test SET name='good' UPSERT
> WHERE name='good';", 'let e = CREATE edge from $a to $b SET weight=0.6;',
> "let a = UPDATE doc_test SET doc_id='abc127' UPSERT WHERE
> doc_id='abc127';", "let b = UPDATE meta_test SET name='good' UPSERT WHERE
> name='good';", 'let e = CREATE edge from $a to $b SET weight=0.3;', "let a
> = UPDATE doc_test SET doc_id='abc128' UPSERT WHERE doc_id='abc128';", "let
> b = UPDATE meta_test SET name='good' UPSERT WHERE name='good';", 'let e =
> CREATE edge from $a to $b SET weight=0.74;', "let a = UPDATE doc_test SET
> doc_id='abc129' UPSERT WHERE doc_id='abc129';", "let b = UPDATE meta_test
> SET name='ugly' UPSERT WHERE name='ugly';", 'let e = CREATE edge from $a to
> $b SET weight=0.2;']
> >>> cmdlist.append("commit retry 100;")
>
>
> I tried doing this but get an exception:
> begin;
> let a = UPDATE doc_test SET doc_id='abc123' UPSERT WHERE doc_id='abc123';
> let b = UPDATE meta_test SET name='good' UPSERT WHERE name='good';
> let e = CREATE edge from $a to $b SET weight=0.1;
> let a = UPDATE doc_test SET doc_id='abc124' UPSERT WHERE doc_id='abc124';
> let b = UPDATE meta_test SET name='bad' UPSERT WHERE name='bad';
> let e = CREATE edge from $a to $b SET weight=0.3;
> let a = UPDATE doc_test SET doc_id='abc125' UPSERT WHERE doc_id='abc125';
> let b = UPDATE meta_test SET name='ugly' UPSERT WHERE name='ugly';
> let e = CREATE edge from $a to $b SET weight=0.2;
> let a = UPDATE doc_test SET doc_id='abc126' UPSERT WHERE doc_id='abc126';
> let b = UPDATE meta_test SET name='good' UPSERT WHERE name='good';
> let e = CREATE edge from $a to $b SET weight=0.6;
> let a = UPDATE doc_test SET doc_id='abc127' UPSERT WHERE doc_id='abc127';
> let b = UPDATE meta_test SET name='good' UPSERT WHERE name='good';
> let e = CREATE edge from $a to $b SET weight=0.3;
> let a = UPDATE doc_test SET doc_id='abc128' UPSERT WHERE doc_id='abc128';
> let b = UPDATE meta_test SET name='good' UPSERT WHERE name='good';
> let e = CREATE edge from $a to $b SET weight=0.74;
> let a = UPDATE doc_test SET doc_id='abc129' UPSERT WHERE doc_id='abc129';
> let b = UPDATE meta_test SET name='ugly' UPSERT WHERE name='ugly';
> let e = CREATE edge from $a to $b SET weight=0.2;
> commit retry 100;
>
> Anyone have any hints on what I'm missing? I'd very much like to use the
> bulk interface in an intelligent way.
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.