2016-11-15 8 views
1

Я на самом деле пытаюсь использовать sql-пакетную вставку с pyorient.Исключение с пакетной вставкой

У меня на самом деле есть уникальный указатель на Edge (in, out), чтобы предотвратить дублирование, потому что я не нашел способ для UPSERT Edge.

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

Если я посылаю мою команду каждые 100 строк, и если один ряд бросить expection, потому что orientdb нашел duplicateIndex (в, из), то целые 100 строк не вставлять.

Так вот мой цикл:

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;" 

запросы что-то вроде:

[ 
'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");' 
] 

Что я могу сделать?

+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 

Надеется, что это помогает.

+1

Здравствуйте, спасибо большое! –