Pyorient SQL批处理执行时忽略错误

时间:2017-02-10 16:55:32

标签: python sql orientdb pyorient

我做了很多研究,但找不到解决以下问题的简单方法。

我有一个OrientDB数据库,它有一个“MaltegoLink”类。 MaltegoLink具有UNIQUE索引以避免重复。

脚本本身遵循以下想法:

self.client = pyorient.OrientDB(host, port)
self.client.db_open( database, username, password )

maltego_links = [{"source": "n1", target: "n2"}, {"source": "n2", target: "n1"}]
sql_batch = "begin;"

for link in maltego_links:
    sql_batch += "CREATE EDGE MaltegoLink FROM (SELECT FROM MaltegoEntity WHERE id='%s') TO (SELECT FROM MaltegoEntity WHERE id='%s');" % (link["source"], link["target"])

self.client.batch(self.sql_batch + "commit;")

我们的想法是通过批量处理来加速数据库的插入。

问题本身: 如果存在重复边缘,如何进行批量查询并跳过数据库提供的错误?

据我所知,OrientDB SQL语法中没有命令允许在发生错误时继续。

编辑:

好的,最后我自己找到了一些解决方法。该方法增加了执行时间,但仍然有益:

LET t = SELECT FROM MaltegoLink WHERE in IN (SELECT FROM MaltegoEntity WHERE maltego_id="n1") AND out IN (SELECT FROM MaltegoEntity WHERE id="n2");

IF ( $t.size() == 0 ) {
    LET b = CREATE EDGE MaltegoLink FROM (SELECT FROM MaltegoEntity WHERE maltego_id="n2") TO (SELECT FROM MaltegoEntity WHERE maltego_id="n1");
}

0 个答案:

没有答案