应为类型 'tuple[float | int | Decimal | str | bytes | date | timedelta | datetime | set[str] | None, ...]' (匹配的泛型类型 '_T'),但实际为 'dict[str, float | int | Decimal | str | bytes | date | timedelta | datetime | set[str] | None]'这种警告该如何修改
时间: 2023-08-21 07:05:50 浏览: 171
警告是由于返回的 JSON 数据中,节点数据以字典的形式存在,而不是元组。可以通过将查询结果转换为字典形式来解决。
以下是修改后的代码示例:
```python
@app.route('/api/get_data', methods=['GET', 'POST'])
def get_data():
keyword = request.args.get('keyword') # 获取请求参数 keyword
cursor = mysql.cursor()
# 根据关键字查询nodes表的数据
if keyword:
cursor.execute("SELECT * FROM nodes WHERE type=%s", (keyword,))
nodes_data = cursor.fetchall()
else:
cursor.execute("SELECT * FROM nodes")
nodes_data = cursor.fetchall()
# 获取节点的ID列表
node_ids = [row[0] for row in nodes_data]
edges_set = set() # 使用集合存储边数据,确保每条边只出现一次
# 根据节点的ID查询相关的边数据
for node_id in node_ids:
cursor.execute("SELECT * FROM edges WHERE `from_id`=%s or `to_id`=%s", (node_id, node_id))
edges_data = cursor.fetchall()
for row in edges_data:
edge = {
'from': row[0],
'to': row[1],
'label': row[2],
'arrows': row[3]
}
edges_set.add((edge['from'], edge['to'], edge['label'], edge['arrows'])) # 将边数据添加到集合中
cursor.close()
# 格式化查询结果
nodes = []
for row in nodes_data:
node = {
'id': row[0],
'label': row[1],
'info': row[2],
'type': row[3]
}
nodes.append(node)
# 将集合中的边数据转换为列表
edges = []
for edge_tuple in edges_set:
edge = {
'from': edge_tuple[0],
'to': edge_tuple[1],
'label': edge_tuple[2],
'arrows': edge_tuple[3]
}
edges.append(edge)
# 创建JSON格式的响应
response = make_response(jsonify({'nodes': nodes, 'edges': edges}))
return response
```
现在,返回的 JSON 数据中的节点数据应该是以字典形式存在,而不再产生警告。
阅读全文