kg_prop_service.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from sqlalchemy.orm import Session
  2. from typing import List
  3. from model.kg_prop import KGProp
  4. from db.session import get_db
  5. import logging
  6. from sqlalchemy.exc import IntegrityError
  7. logger = logging.getLogger(__name__)
  8. class KGPropService:
  9. def __init__(self, db: Session):
  10. self.db = db
  11. def get_props_by_ref_id(self, ref_id: int, prop_name: str = None) -> List[dict]:
  12. try:
  13. query = self.db.query(KGProp).filter(KGProp.ref_id == ref_id)
  14. if prop_name:
  15. query = query.filter(KGProp.prop_name == prop_name)
  16. props = query.all()
  17. return [{
  18. 'id': p.id,
  19. 'category': p.category,
  20. 'prop_name': p.prop_name,
  21. 'prop_value': p.prop_value,
  22. 'prop_title': p.prop_title,
  23. 'type': p.type
  24. } for p in props]
  25. except Exception as e:
  26. logger.error(f"根据ref_id查询属性失败: {str(e)}")
  27. raise ValueError("查询失败")
  28. def create_prop(self, prop_data: dict) -> KGProp:
  29. try:
  30. new_prop = KGProp(**prop_data)
  31. self.db.add(new_prop)
  32. self.db.commit()
  33. return new_prop
  34. except IntegrityError as e:
  35. self.db.rollback()
  36. logger.error(f"创建属性失败: {str(e)}")
  37. raise ValueError("数据库完整性错误")
  38. def update_prop(self, prop_id: int, update_data: dict) -> KGProp:
  39. prop = self.db.query(KGProp).get(prop_id)
  40. if not prop:
  41. raise ValueError("属性未找到")
  42. try:
  43. for key, value in update_data.items():
  44. setattr(prop, key, value)
  45. self.db.commit()
  46. return prop
  47. except Exception as e:
  48. self.db.rollback()
  49. logger.error(f"更新属性失败: {str(e)}")
  50. raise ValueError("更新失败")
  51. def delete_prop(self, prop_id: int) -> None:
  52. prop = self.db.query(KGProp).get(prop_id)
  53. if not prop:
  54. raise ValueError("属性未找到")
  55. try:
  56. self.db.delete(prop)
  57. self.db.commit()
  58. return None
  59. except Exception as e:
  60. self.db.rollback()
  61. logger.error(f"删除属性失败: {str(e)}")
  62. raise ValueError("删除失败")