我有跟的Neo4j和Python一個奇怪的問題,這似乎是與正在把數字輸入由Python接口py2neoNeo4j的Python接口py2neo和數據輸入
如果我使用創建一個簡單的數據庫Cypher支架的命令: -
create (n:Type {name:"foo1"});
create (n:Type {name:"foo2"});
match (n:Type {name:"foo1"}), (n2:Type {name:"foo2"})
create (n)-[r:NUMBER {name: "flow1", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow2", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow3", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow4", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow5", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow6", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow7", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow8", value: 1000000000}]->(n2),
(n)-[:NUMBER {name: "flow9", value: 1000000000}]->(n2);
和運行彙總查詢,總結關係的值: -
match (n)-[r]->(n2) return n,sum(r.value),n2;
我得到預期的結果: -
+--------------------------------------------------------------------+
| n | sum(r.value) | n2 |
+--------------------------------------------------------------------+
| Node[20103]{name:"foo1"} | 9000000000 | Node[20104]{name:"foo2"} |
+--------------------------------------------------------------------+
但是如果我填充使用這個python腳本相同的數據集: -
#!/usr/bin/python
from py2neo import Graph, Path, Node, authenticate, Relationship
authenticate("localhost:7474", "neo4j", "password")
graph = Graph()
foo1 = Node('Type', name='foo1')
foo2 = Node('Type', name='foo2')
graph.create(foo1)
graph.create(foo2)
for i in range(1,10):
r = Relationship.cast(foo1, 'NUMBER', foo2, { 'name': 'foo%d' % i, 'value': 1000000000 })
graph.create_unique(r)
然後運行相同的查詢,我得到了稍微令人驚訝的結果: -
neo4j-sh (?)$ match (n)-[r]->(n2) return n,sum(r.value),n2;
+--------------------------------------------------------------------+
| n | sum(r.value) | n2 |
+--------------------------------------------------------------------+
| Node[20105]{name:"foo1"} | 410065408 | Node[20106]{name:"foo2"} |
+--------------------------------------------------------------------+
哪個與sum()被限制爲32位一致。
如果任何值大於32位,則總和是正確的,但如果所有值都在32位之內,則返回錯誤的答案。
任何幫助表示讚賞。
這是蟒蛇2.7.6與2.3.1的Neo4j在Ubuntu 14.04lts
謝謝,鑄造到一個在Python中的浮動確實給出了期望的結果,但我希望避免必須使用浮點數,因爲所有數據都保證爲整數。 它絕對看起來像一個bug,我認爲它必須是一個neo4j問題,總和不應該被限制爲32位整數算術。雖然可以做py2neo應該插入一切的情況很長的情況下... –
到目前爲止,我認爲每個整數實際上是作爲一個長期添加。也許問題出在求和函數中? –
看起來這可能是一個錯誤,據報道: - https://github.com/neo4j/neo4j/issues/4450 –