2017-02-23 161 views
0

我使用python 3與py2neo(v 3.1.2)一起將大量數據從MySQL插入到Neo4j。 MySQL中的表格大約有2000萬行。 我想按照neo4j網站上的建議,在不將MySQL數據轉換爲CSV的情況下進行插入操作。大數據集從MySQL插入到neo4j

我的代碼如下所示:

transaction=graph_db.begin() 
sql="SELECT id FROM users" 
cursor.execute(sql) 
user_data=cursor.fetchall() 
count=1 
for row in user_data: 
    user_node=Node("User",user_id=row[0]) 
    transaction.create(user_node) 
    if count%10000==0: 
     transaction.commit() 
    count=count+1 

我們的目標是在10000批次插入,但在第一次迭代(一批10K的第一次插入)成交後分解。以下是錯誤:

raise TransactionFinished(self) 
py2neo.database.TransactionFinished: <py2neo.database.BoltTransaction object at 0x104e36588> 

有人可以解釋這個錯誤意味着什麼以及如何解決這個問題?

回答

0

我不知道蟒蛇,但問題是,你是在週期提交事務,不要打開它:

sql="SELECT id FROM users" 
cursor.execute(sql) 
user_data=cursor.fetchall() 
count=1 
for row in user_data: 
    if count%10000==1: 
     transaction=graph_db.begin() 
    user_node=Node("User",user_id=row[0]) 
    transaction.create(user_node) 
    if (count%10000==0) or (count==len(user_data)): 
     transaction.commit() 
    count=count+1 
+0

我不認爲這會工作。在沒有聲明事務對象的情況下,如何創建前10000個節點(因爲你已經在if條件下初始化了它)? – Jmj

+0

我試過了。再次遇到同樣的錯誤。它與neo向db添加節點的速度有關,這可能比形成下一批插入所花費的時間多嗎? – Jmj

+0

嘿,我的壞,我設置了一個錯誤的值。現在工作正常,謝謝!在一個側面說明,這種方法是可行的這種大型數據庫或我真的應該去SQL轉儲 - > CSV->新插入路線? – Jmj