如何使用YAML在Apache Age中为两个Python函数创建共用Person节点
用YAML配置在Apache Age的Python函数间共享并更新Person节点
1. 定义YAML通用配置文件
用顶层键common_person存放共用Person节点的所有属性,后续新增属性直接在该节点下添加即可:
common_person: name: John Doe age: 30 email: john.doe@example.com
2. 将YAML文件加载为Python字典的最佳方式
使用PyYAML库是标准且安全的方案:
- 先安装依赖:
pip install pyyaml
- 编写加载函数,采用
yaml.safe_load避免执行恶意代码:
import yaml def load_common_config(config_file_path): with open(config_file_path, 'r', encoding='utf-8') as config_file: return yaml.safe_load(config_file)
3. 利用字典创建/更新Apache Age的Person节点
结合Cypher的MERGE和SET语句,实现跨函数的节点共享与更新:
MERGE自动判断节点是否存在:已有name匹配的Person节点则直接匹配,不存在则创建新节点SET p += $props批量将字典中的所有属性合并到节点上,无需逐个编写属性赋值
完整示例代码:
from age import Graph import yaml def load_common_config(config_file_path): with open(config_file_path, 'r', encoding='utf-8') as config_file: return yaml.safe_load(config_file) def sync_common_person_node(common_config): person_props = common_config['common_person'] # 初始化Age图连接 graph = Graph("path/to/database") # 事务中执行Cypher语句 with graph.transaction() as tx: tx.query( """ MERGE (p:Person {name: $name}) SET p += $props """, name=person_props['name'], props=person_props ) # 第一个业务函数 def process_user_data(): config = load_common_config('common_person_config.yaml') sync_common_person_node(config) # 此处添加你的业务逻辑 # 第二个业务函数 def generate_user_report(): config = load_common_config('common_person_config.yaml') sync_common_person_node(config) # 此处添加你的业务逻辑
关键说明
- 两个函数加载同一个YAML配置,通过
name属性匹配确保操作的是同一个Person节点 - 修改节点属性只需更新YAML文件,无需修改Python代码中的Cypher语句
- 事务操作保证节点更新的原子性,避免数据不一致
内容的提问来源于stack exchange,提问作者AmrShams07
相关产品推荐
相关产品推荐

