2016-11-28 89 views
-2
Traceback (most recent call last): 
    File "run.py", line 1, in <module> 
    from blog import app 
    File "C:\Users\Administrator\Downloads\py2neo\neo4j-flask\blog\__init__.py", line 4, in <module> 
    graph.schema.create_uniqueness_constraint("User", "username") 
    File "C:\Users\Administrator\Downloads\py2neo\neo4j-flask\venv\lib\site-packages\py2neo\database\__init__.py", line 775, in create_uniqueness_constraint 
    {"property_keys": [property_key]}) 
    File "C:\Users\Administrator\Downloads\py2neo\neo4j-flask\venv\lib\site-packages\py2neo\database\http.py", line 212, in post 
    raise_from(GraphError(message, **content), error) 
    File "C:\Users\Administrator\Downloads\py2neo\neo4j-flask\venv\lib\site-packages\py2neo\util.py", line 124, in raise_from 
    raise exception 
py2neo.database.status.ConstraintViolationException: Constraint already exists: CONSTRAINT ON (user:User) ASSERT user.username IS UNIQUE 
+0

我認爲這個錯誤很明顯:你試圖在已經存在的db上添加一個約束。約束和索引只需要創建一次,它們不應該是任何反覆運行的腳本的一部分。即使您正在討論數據填充腳本,最好將索引和約束創建分離到其自己的腳本中,以便稍後嘗試將數據重新加載到相同的數據庫時不會影響它。 – InverseFalcon

+0

那麼我需要做些什麼來解決它,刪除代碼graph.schema.create_uniqueness_constraint(「用戶」,「用戶名」)? –

+0

我會這樣認爲的。該代碼不應出現在您打算運行多次的腳本中。 – InverseFalcon

回答

2

爲了避免這種情況,您可以使用APOC過程apoc.schema.assert來確保您需要的所有「模式」(索引和約束)都存在。

  • 如果調用中指定的任何模式尚不存在,則會創建它們。
  • 但請注意,在調用中未指定的任何預先存在的模式將被刪除。

還有就是如何在this section of the APOC documentation中間使用apoc.schema.assert一個例子。

相關問題