123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from neo4j import GraphDatabase
- from neo4j.exceptions import ServiceUnavailable
- import os
- class Neo4jDriver:
- def __init__(self, uri=None, user=None, password=None, encrypted=False):
- self._driver = None
-
- # 优先使用传入的参数
- if uri is not None:
- self.uri = uri
- elif user is not None or password is not None or encrypted is not None:
- # 如果只传了部分参数,使用环境变量或默认值填充缺失的
- self.uri = os.environ.get('NEO4J_URI', "bolt://192.168.3.143:7687")
- else:
- # 无参数调用时,尝试从Flask配置获取,否则使用环境变量或默认值
- self.uri = self._get_config_value('NEO4J_URI', "bolt://192.168.3.143:7687")
-
- if user is not None:
- self.user = user
- else:
- self.user = self._get_config_value('NEO4J_USER', "neo4j")
-
- if password is not None:
- self.password = password
- else:
- self.password = self._get_config_value('NEO4J_PASSWORD', "cituneo4j")
-
- if encrypted is not None:
- self.encrypted = encrypted
- else:
- encrypted_str = self._get_config_value('NEO4J_ENCRYPTED', 'false')
- self.encrypted = encrypted_str.lower() == 'true' if isinstance(encrypted_str, str) else encrypted_str
-
- def _get_config_value(self, key, default_value):
- """获取配置值,优先从Flask配置获取,否则从环境变量获取,最后使用默认值"""
- try:
- # 尝试从Flask配置获取
- from flask import current_app
- if current_app and hasattr(current_app, 'config'):
- return current_app.config.get(key, default_value)
- except (ImportError, RuntimeError):
- # 不在Flask环境中或Flask应用上下文外
- pass
-
- # 从环境变量获取
- return os.environ.get(key, default_value)
-
- def connect(self):
- if not self._driver:
- self._driver = GraphDatabase.driver(
- self.uri,
- auth=(self.user, self.password),
- encrypted=self.encrypted
- )
- return self._driver
-
- def close(self):
- if self._driver:
- self._driver.close()
- self._driver = None
-
- def verify_connectivity(self):
- try:
- self.connect().verify_connectivity()
- return True
- except ServiceUnavailable:
- return False
-
- def get_session(self):
- """获取 Neo4j 会话"""
- return self.connect().session()
- # 单例实例
- neo4j_driver = Neo4jDriver()
|