postgresql SQL查询执行返回一个str类型,而不是ApacheAGE中的复合顶点和边类型

qxgroojn  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(3)|浏览(168)

我在Python中执行以下查询,以返回存储在Apache AGE中的所有节点的列表。

with postgresql.cursor() as cursor:
    query = """SELECT * FROM cypher('graph', $$ MATCH (v) RETURN v $$) as (v agtype);""" 
    cursor.execute(query)
    for row in cursor:
        print(row[0])

但是这里的row[0]str而不是<class 'age.models.Node'>类型。我需要访问该节点的id、label和其他属性,我可以通过使用row[0].idrow[0].label轻松地使用<class 'age.models.Node'>完成这些操作。我不能用str类型来做这件事。
我目前正在尝试使用pytest_postgresql中的pytestfactories编写单元测试用例。当我使用psycopg2运行相同的东西时,它可以正常工作,并且返回预期的数据类型,但使用pytest_postgresql失败。
这是设置数据库的代码。

postgresql_my_proc = factories.postgresql_proc()
postgresql_my = factories.postgresql('postgresql_my_proc')

pytest_postgresql的问题吗?是否有可能解决这个问题,是否有一些解决办法来实现相同的问题?

ryhaxcpt

ryhaxcpt1#

你应该使用Apache AGE Python Driver。这样,检索节点ID和标签将非常容易,如以下示例所示:

cursor = ag.execCypher("MATCH (n:Person) RETURN n")
for row in cursor:
    vertex = row[0]
    print(vertex)
    print(vertex.id, vertex.label, vertex["name"])

可以看到更多样品here

pieyvz9o

pieyvz9o2#

我刚刚看到了一个来自apache时代GitHub文档的示例,他们正在使用另一种方法来检索这些东西。

单个结果列

cursor = ag.execCypher("MATCH (n:Person {name: %s) RETURN n", params('Andy',))
for row in cursor:
  vertex = row[0]
  print(vertex.id, vertex["name"], vertex) # row has id, label, properties

多结果列

cursor = ag.execCypher("MATCH (n:Person) RETURN label(n), n.name", cols=['label VARCHAR', 'name'])
for row in cursor:
    label = row[0]
    name = row[1]
    print(label, name)

你可以从这个文件中得到更多的信息。
Github File

wnavrhmk

wnavrhmk3#

您的查询可能返回str类型,因为您没有加载AGE python驱动程序。你应该使用这个link访问github上的AGE python示例,以了解你可能做错了什么。

相关问题