kg_prop_service.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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) -> List[dict]:
  12. try:
  13. props = self.db.query(KGProp).filter(KGProp.ref_id == ref_id).all()
  14. return [{
  15. 'id': p.id,
  16. 'category': p.category,
  17. 'prop_name': p.prop_name,
  18. 'prop_value': p.prop_value,
  19. 'prop_title': p.prop_title,
  20. 'type': p.type
  21. } for p in props]
  22. except Exception as e:
  23. logger.error(f"根据ref_id查询属性失败: {str(e)}")
  24. raise ValueError("查询失败")
  25. def create_prop(self, prop_data: dict) -> KGProp:
  26. try:
  27. new_prop = KGProp(**prop_data)
  28. self.db.add(new_prop)
  29. self.db.commit()
  30. return new_prop
  31. except IntegrityError as e:
  32. self.db.rollback()
  33. logger.error(f"创建属性失败: {str(e)}")
  34. raise ValueError("数据库完整性错误")
  35. def update_prop(self, prop_id: int, update_data: dict) -> KGProp:
  36. prop = self.db.query(KGProp).get(prop_id)
  37. if not prop:
  38. raise ValueError("属性未找到")
  39. try:
  40. for key, value in update_data.items():
  41. setattr(prop, key, value)
  42. self.db.commit()
  43. return prop
  44. except Exception as e:
  45. self.db.rollback()
  46. logger.error(f"更新属性失败: {str(e)}")
  47. raise ValueError("更新失败")
  48. def delete_prop(self, prop_id: int) -> None:
  49. prop = self.db.query(KGProp).get(prop_id)
  50. if not prop:
  51. raise ValueError("属性未找到")
  52. try:
  53. self.db.delete(prop)
  54. self.db.commit()
  55. return None
  56. except Exception as e:
  57. self.db.rollback()
  58. logger.error(f"删除属性失败: {str(e)}")
  59. raise ValueError("删除失败")