Py2Neo无法正确创建Datetime数据类型?

时间:2019-01-14 20:01:23

标签: python datetime neo4j

我试图构建一些函数来填充新的Neo4j图,但我很难使用Py2Neo v4和Neo4j 3.4.7将日期填充为Neo4j中的正确数据类型。根据Neo4j docummention,有Datetime数据类型... 和我也想获得的空间点

我一生无法在Py2Neo中找到任何有关使用空间点或时间点的文档。我发现Py2Neo的v2版本中有一个用于这些数据类型的插件,但是还没有找到其他东西。

我可以将Python datetime.datetime对象作为节点属性发送给Neo4j,但是当我尝试使用Cypher进行查询时,它不会确认它的格式正确。

# python/py2neo code being used to make the node
example_node = Node("Example", date=datetime.datetime.now())
tx.create(example_node)
# cypher query
MATCH (e:Example)
WHERE e.date > datetime("2018-12-31")
RETURN e

注意:如果将e.date像这样datetime投射到datetime(e.date),我会得到语法错误:

Neo.ClientError.Statement.SyntaxError: Text cannot be parsed to a DateTime
"2019-01-14 13:00:52"

在Py2neo中找到适当文档的任何帮助,甚至可能会更好地使用驱动程序。

谢谢

1 个答案:

答案 0 :(得分:3)

结果证明,py2neo使用了内部的neotime模块来返回/创建Neo4j日期/时间类型。 (链接到文档here)是通过使用Cypher将现有的字符串字段转换为date类型并查看查询图表时返回的py2neo来发现的。

from py2neo import Graph, Node
import neotime
import uuid

# Create graph object
graph = Graph()

# Create example node for a blog post
post = Node(
    'Post', 
    id=str(uuid.uuid4()), 
    title='Neo4j Date Post', 
    text='Here is some text',
    # Use neotime to create Neo4j date/time fields
    timestamp=neotime.DateTime.now(), 
    date=neotime.Date(2020, 5, 23)
)
graph.create(post)

图上的查询将返回neotime.Dateneotime.DateTime对象,幸运的是,您可以调用to_native()方法,将它们转换为datetime对象

import neotime

print(neotime.Date(2020, 5, 24).to_native())
# datetime.date(2020, 5, 24)

print(neotime.DateTime.now().to_native())
# datetime.datetime(2020, 5, 24, 11, 43, 30, 373512)