2016-11-15 11 views
1

私は実際にpyorientでSQLバッチインサートを使用しようとしています。バッチインサートの例外

エッジをUPSERTする方法が見つからなかったので、重複を防ぐために、実際にエッジ(イン、アウト)にユニークなインデックスを持っています。

session_orientdb.command("CREATE INDEX indexRegroupe ON Regroupe (out, in) UNIQUE") 

orientdbはその後、全体100行が挿入されない(うち、中)duplicateIndexを見つけたので1行がexpectionを投げる場合、私はすべての100行私のコマンドを送信した場合。だからここ

は私のループです:

[ 
'UPDATE Expression SET libelle = "internat fille" UPSERT WHERE libelle = "internat fille";', 
'CREATE EDGE Regroupe FROM (SELECT FROM Ontologie WHERE id = "40") to (SELECT FROM Expression WHERE libelle = "internat fille") set score=8;', 
'UPDATE Cri SET id = "INTERNAT", libelle = "internat" UPSERT WHERE id = "INTERNAT";', 
'CREATE EDGE Identifie FROM (SELECT FROM Expression WHERE libelle = "internat fille") to (SELECT FROM Cri WHERE id = "INTERNAT");' 
] 

私は何を行うことができます。

i = 0 
cmd = "BEGIN;" 
# Loop untill receiving the "poison pill" item (meaning : no more element to read) 
poison_pill = False 
while not(poison_pill): 
    queries = p_queue.get() 
    # Manage poison pill 
    if queries is None: 
     poison_pill = True 
     p_queue.task_done() 
     cmd += "commit;" 
     session_orientdb.batch(cmd) 
    else: 
     for query in queries: 
      i += 1 
      cmd += query + ";" 
    if (i > 100): 
     i = 0 
     cmd += "COMMIT retry 20;" 
     try: 
      session_orientdb.batch(cmd) 
     except Exception as e: 
      print (e) 
      cmd = "BEGIN;" 

クエリのようなものですか。

+3

どのバージョンをお使いですか?コードを共有できますか? –

+1

pyorient/orientdbの最新バージョンを使用しています。コードの投稿を編集しています –

+1

編集:コードを追加しました! –

答えて

2

あなたは条件if

begin 
let a= select from Regroupe where out=#9:0 and in=#10:0 
if($a.size()>0){ 
    // edge exists so do other query 
} 
return $a 

はそれが役に立てば幸いを使用shoud。

+1

こんにちは、 ありがとう! –

関連する問題