本文介绍如何在应用中处理和使用数据库读写返回的结果。
返回Response
有些方法(如gql()
和uql()
)返回一个Response
对象。为在应用中使用其包含的数据,首先要从Response
对象提取DataItem
,再将DataItem
转换成一个合适的驱动数据结构。
一个Response
对象有以下属性:
属性 |
类型 |
描述 |
---|---|---|
aliases |
List[Alias ] |
结果别名列表;每个Alias 包括属性alias (别名名称)和result_type (结果类型) |
items |
Dict[str, DataIem ] |
一个字典,str 键是别名名称,DataItem 值是别名代表的数据 |
explainPlan |
List[ExplainPlan ] |
执行计划列表 |
status |
Status |
执行状态,包括属性code 和message |
statistics |
Statistics |
执行的统计信息,包括属性nodeAffected 、edgeAffected 、totalCost 和engineCost |
提取DataItem
使用get()
或alias()
方法从一个Response
对象提取DataItem
.
一个DataItem
对象有以下属性:
属性 |
类型 |
描述 |
---|---|---|
alias |
str | 别名名称 |
type |
str | 结果类型 |
entities |
list | 结果数据列表 |
get()
通过别名索引获取数据。
参数
int
:别名索引。
返回值
DataItem
:获取到的数据。
response = Conn.gql("MATCH (n)-[e]->() RETURN n, e LIMIT 3")
print(response.get(0).toJSON())
GQL语句返回n
和e
两个别名;get()
方法获取与索引为0的别名n
对应的DataItem
。
{"alias": "n", "entities": [{"uuid": 72059793061183504, "id": "ULTIPA800000000000003B", "schema": "account", "values": {"gender": "female", "industry": "Publishing", "name": "Velox", "year": 1976}}, {"uuid": 648520545364606993, "id": "ULTIPA800000000000003E", "schema": "account", "values": {"gender": "female", "industry": "Food&Beverage", "name": "Claire", "year": 1989}}, {"uuid": 720578139402534937, "id": "ULTIPA8000000000000050", "schema": "account", "values": {"gender": "male", "industry": "Education", "name": "Holly", "year": 2000}}], "type": "NODE"}
alias()
通过别名名称获取数据。
参数
str
:别名名称。
返回值
DataItem
:获取到的数据。
response = Conn.gql("MATCH (n)-[e]->() RETURN n, e LIMIT 3")
print(response.alias("e").toJSON())
GQL语句返回n
和e
两个别名;alias()
方法获取别名e
对应的DataItem
。
{"alias": "e", "entities": [{"schema": "agree", "uuid": 139, "fromId": "ULTIPA800000000000000E", "toId": "ULTIPA800000000000000D", "fromUuid": 6269012880322985990, "toUuid": 7998395137233256453, "values": {"targetPost": 905, "timestamp": 1572662452, "datetime": "2019-11-02 18:40:52"}}, {"schema": "agree", "uuid": 167, "fromId": "ULTIPA800000000000000E", "toId": "ULTIPA800000000000000F", "fromUuid": 6269012880322985990, "toUuid": 8214567919347040263, "values": {"targetPost": 1419, "timestamp": 1554431053, "datetime": "2019-04-05 18:24:13"}}, {"schema": "agree", "uuid": 15, "fromId": "ULTIPA8000000000000065", "toId": "ULTIPA8000000000000067", "fromUuid": 6629300850512625701, "toUuid": 5764609722057490465, "values": {"targetPost": 1374, "timestamp": 1552775174, "datetime": "2019-03-17 14:26:14"}}], "type": "EDGE"}
转换DataItem
使用一个as<DataStructure>()
方法将DataItem.entities
转换成对应的驱动数据结构。
例如,以下请求中的GQL语句从图中获取三个点,asNodes()
方法将与别名n
对应的DataItem
转换成一个Node
对象列表:
response = Conn.gql("MATCH (n) RETURN n LIMIT 3")
nodeList = response.alias('n').asNodes()
for node in nodeList:
print(node.getID())
以下是DataItem
所有的转换方法。请留意每种方法适用的DataItem.type
和DataItem.alias
。
方法 |
DataItem.type |
DataItem.alias |
返回 |
描述 |
---|---|---|---|---|
asNodes() |
NODE | 任何 | List[Node ] |
转换成一个Node 对象列表 |
asFirstNode() |
NODE | 任何 | Node |
将返回的第一个结果数据转换成一个Node 对象 |
asEdges() |
EDGE | 任何 | List[Edge ] |
转换成一个Edge 对象列表 |
asFirstEdge() |
EDGE | 任何 | Edge |
将返回的第一个结果数据转换成一个Edge 对象 |
asGraph() |
GRAPH | 任何 | Graph |
转换成一个Graph 对象 |
asGraphSets() |
TABLE | _graph |
List[GraphSet ] |
转换成一个GraphSet 对象列表 |
asSchemas() |
TABLE | _nodeSchema , _edgeSchema |
List[Schema ] |
转换成一个Schema 对象列表 |
asProperties() |
TABLE | _nodeProperty , _edgeProperty |
List[Property ] |
转换成一个Property 对象列表 |
asTable() |
TABLE | 任何 | Table |
转换成一个Table 对象 |
asAttr() |
ATTR | 任何 | Attr |
转换成一个Attr 对象 |
asAlgos() |
TABLE | _algoList |
List[Algo ] |
转换成一个Algo 对象列表 |
asExtas() |
TABLE | _extaList |
List[Exta ] |
转换成一个Exta 对象列表 |
asIndexes() |
TABLE | _nodeIndex , _edgeIndex , _nodeFulltext , _edgeFulltext |
List[Index ] |
转换成一个Index 对象列表 |
asPrivilieges() |
TABLE | _privilege |
List[Priviliege ] |
转换成一个Priviliege 对象列表 |
asPolicies() |
TABLE | _policy |
List[Policy ] |
转换成一个Policy 对象列表 |
asUsers() |
TABLE | _user |
List[User ] |
转换成一个User 对象列表 |
asProcesses() |
TABLE | _top |
List[Process ] |
转换成一个Process 对象列表 |
asJobs() |
TABLE | _job |
List[Job ] |
转换成Job 对象列表 |
asHDCGraphs() |
TABLE | _hdcGraphList |
List[HDCGraph ] |
转换成一个HDCGraph 对象列表 |
asProjections() |
TABLE | _projectionList |
List[Projection ] |
转换成一个Projection 对象列表 |
asStats() |
TABLE | license |
Stats |
转换成一个Stats 对象 |
返回InsertResponse
有些数据插入方法(如insertNodesBatchBySchema()
和insertNodesBatchAuto()
)返回一个InsertResponse
对象。
一个InsertResponse
对象有以下属性:
属性 |
类型 |
描述 |
---|---|---|
ids |
List[str] | 插入的点_id 列表;请留意,InsertRequestConfig.silent 为True 时列表为空 |
uuids |
List[int] | 插入的边_uuid 列表;请留意,InsertRequestConfig.silent 为True 时列表为空 |
errorItems |
Dict[int,str] | 错误信息字典,键是发生错误的点或边的顺序索引,值是错误信息 |
status |
Status |
执行状态,包括属性code 和message |
statistics |
Statistics |
执行的统计信息,包括属性nodeAffected 、edgeAffected 、totalCost 和engineCost |
返回驱动数据结构
一些方法返回驱动数据结构的一个实例或一个列表,可直接使用。例如:
getGraph()
方法返回一个GraphSet
对象。showGraph()
方法返回一个GraphSet
对象列表,即List[GraphSet]
。