![]() |
5 days ago | |
---|---|---|
.. | ||
NEO4J_NODE_CREATION_LOGIC.md | 1 week ago | |
README_parse_neo4j_process.md | 1 week ago | |
TALENT_NEO4J_PROPERTIES.md | 1 week ago | |
TIME_ZONE_FIX_SUMMARY.md | 5 days ago | |
USAGE_EXAMPLE.md | 1 week ago | |
hotel_management.py | 1 month ago | |
parse_card.py | 5 days ago | |
parse_menduner.py | 5 days ago | |
parse_neo4j_process.py | 5 days ago | |
parse_pic.py | 5 days ago | |
parse_resume.py | 5 days ago | |
parse_system.py | 5 days ago | |
parse_task.py | 5 days ago | |
parse_web.py | 5 days ago | |
time_utils.py | 5 days ago |
parse_neo4j_process.py
是一个Python程序,用于将PostgreSQL数据库中的酒店职位数据和酒店集团品牌数据同步到Neo4j图数据库中。
dataops/public/hotel_positions
status = 'active'
且 department_zh
、position_zh
、level_zh
都不为空department_zh
(部门中文名称)、department_en
(部门英文名称)position_zh
(职位中文名称)、position_en
(职位英文名称)level_zh
(级别中文名称)、level_en
(级别英文名称)dataops/public/hotel_group_brands
status = 'active'
且 group_name_zh
、brand_name_zh
、positioning_level_zh
都不为空group_name_zh
(集团中文名称)、group_name_en
(集团英文名称)brand_name_zh
(品牌中文名称)、brand_name_en
(品牌英文名称)positioning_level_zh
(定位级别中文名称)、positioning_level_en
(定位级别英文名称)DataLabel
name
: 对应字段值(department_zh/position_zh/level_zh/group_name_zh/brand_name_zh/positioning_level_zh)en_name
: 对应英文名称(department_en/position_en/level_en/group_name_en/brand_name_en/positioning_level_en)describe
: 空字符串time
: 当前系统时间category
: "人才地图"status
: "active"node_type
: 节点类型(department/position/position_level/group/brand/brand_level)name
的DataLabel节点# 在项目根目录下运行
python app/core/data_parse/parse_neo4j_process.py
from app.core.data_parse.parse_neo4j_process import HotelPositionNeo4jProcessor
# 创建处理器实例
processor = HotelPositionNeo4jProcessor()
# 运行同步程序
success = processor.run()
neo4j>=5.0.0
- Neo4j Python驱动psycopg2-binary>=2.9.10
- PostgreSQL适配器SQLAlchemy>=2.0.0
- 数据库ORMFlask>=3.0.2
- Web框架(用于配置管理)dataops
数据库的 hotel_positions
和 hotel_group_brands
表程序会自动读取 app/config/config.py
中的数据库连接配置:
# PostgreSQL配置
SQLALCHEMY_DATABASE_URI = 'postgresql://username:password@host:port/database'
# Neo4j配置
NEO4J_URI = "bolt://host:port"
NEO4J_USER = "username"
NEO4J_PASSWORD = "password"
NEO4J_ENCRYPTED = False
程序会在控制台显示执行进度和结果:
2024-01-01 10:00:00 - INFO - 开始执行酒店职位数据和酒店集团品牌数据Neo4j同步程序
2024-01-01 10:00:01 - INFO - PostgreSQL数据库连接成功
2024-01-01 10:00:02 - INFO - Neo4j数据库连接成功
2024-01-01 10:00:03 - INFO - 开始处理酒店职位数据...
2024-01-01 10:00:04 - INFO - 成功获取 15 条酒店职位数据
2024-01-01 10:00:05 - INFO - 成功创建部门节点: 前厅部
2024-01-01 10:00:06 - INFO - 成功创建职位节点: 前台接待
2024-01-01 10:00:07 - INFO - 成功创建级别节点: 初级
2024-01-01 10:00:08 - INFO - 成功创建关系: 前台接待 BELONGS_TO 前厅部
2024-01-01 10:00:09 - INFO - 成功创建关系: 前台接待 HAS_LEVEL 初级
...
2024-01-01 10:00:15 - INFO - 酒店职位数据同步完成: 酒店职位数据同步完成
2024-01-01 10:00:15 - INFO - 总计记录: 15
2024-01-01 10:00:15 - INFO - 部门节点 - 新建: 8, 跳过: 2
2024-01-01 10:00:15 - INFO - 职位节点 - 新建: 12, 跳过: 3
2024-01-01 10:00:15 - INFO - 级别节点 - 新建: 5, 跳过: 1
2024-01-01 10:00:15 - INFO - 关系创建: 30
2024-01-01 10:00:16 - INFO - 开始处理酒店集团品牌数据...
2024-01-01 10:00:17 - INFO - 成功获取 20 条酒店集团品牌数据
2024-01-01 10:00:18 - INFO - 成功创建集团节点: 万豪国际
2024-01-01 10:00:19 - INFO - 成功创建品牌节点: 丽思卡尔顿
2024-01-01 10:00:20 - INFO - 成功创建品牌级别节点: 奢华
2024-01-01 10:00:21 - INFO - 成功创建关系: 丽思卡尔顿 BELONGS_TO 万豪国际
2024-01-01 10:00:22 - INFO - 成功创建关系: 丽思卡尔顿 HAS_LEVEL 奢华
...
2024-01-01 10:00:30 - INFO - 酒店集团品牌数据同步完成: 酒店集团品牌数据同步完成
2024-01-01 10:00:30 - INFO - 总计记录: 20
2024-01-01 10:00:30 - INFO - 集团节点 - 新建: 12, 跳过: 3
2024-01-01 10:00:30 - INFO - 品牌节点 - 新建: 18, 跳过: 2
2024-01-01 10:00:30 - INFO - 品牌级别节点 - 新建: 8, 跳过: 1
2024-01-01 10:00:30 - INFO - 关系创建: 40
2024-01-01 10:00:30 - INFO - 所有数据同步任务完成
程序会在 logs/parse_neo4j_process.log
文件中记录详细的执行日志。
程序返回执行结果统计,包括两个数据表的处理结果:
{
'success': True,
'message': '酒店职位数据同步完成',
'total': 15, # 总记录数
'departments_created': 8, # 新建部门节点数
'departments_skipped': 2, # 跳过部门节点数
'positions_created': 12, # 新建职位节点数
'positions_skipped': 3, # 跳过职位节点数
'levels_created': 5, # 新建级别节点数
'levels_skipped': 1, # 跳过级别节点数
'relationships_created': 30 # 创建关系数
}
{
'success': True,
'message': '酒店集团品牌数据同步完成',
'total': 20, # 总记录数
'groups_created': 12, # 新建集团节点数
'groups_skipped': 3, # 跳过集团节点数
'brands_created': 18, # 新建品牌节点数
'brands_skipped': 2, # 跳过品牌节点数
'brand_levels_created': 8, # 新建品牌级别节点数
'brand_levels_skipped': 1, # 跳过品牌级别节点数
'relationships_created': 40 # 创建关系数
}
程序会创建六种类型的DataLabel节点:
node_type: 'department'
)node_type: 'position'
)node_type: 'position_level'
)node_type: 'group'
)node_type: 'brand'
)node_type: 'brand_level'
)BELONGS_TO: 职位 → 部门
HAS_LEVEL: 职位 → 级别
BELONGS_TO: 品牌 → 集团
HAS_LEVEL: 品牌 → 品牌级别
(前厅部:DataLabel {name: '前厅部', node_type: 'department'})
↑ BELONGS_TO
(前台接待:DataLabel {name: '前台接待', node_type: 'position'})
↓ HAS_LEVEL
(初级:DataLabel {name: '初级', node_type: 'position_level'})
(万豪国际:DataLabel {name: '万豪国际', node_type: 'group'})
↑ BELONGS_TO
(丽思卡尔顿:DataLabel {name: '丽思卡尔顿', node_type: 'brand'})
↓ HAS_LEVEL
(奢华:DataLabel {name: '奢华', node_type: 'brand_level'})
数据库连接失败
表不存在或权限不足
hotel_positions
和 hotel_group_brands
表存在Neo4j节点创建失败
关系创建失败
所有错误都会记录在日志文件中,包括:
可以通过修改配置类来调整程序行为:
可以修改SQL查询来添加更多过滤条件:
可以轻松添加更多节点属性:
可以添加更多关系类型:
如果遇到问题,请检查: