kg_prop_service.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 get_props_by_id(self, id: int, prop_name: str = None) -> List[dict]:
  29. try:
  30. query = self.db.query(KGProp).filter(KGProp.id == id)
  31. if prop_name:
  32. query = query.filter(KGProp.prop_name == prop_name)
  33. props = query.first()
  34. if not props:
  35. raise ValueError("props not found")
  36. return {
  37. 'id': props.id,
  38. 'category': props.category,
  39. 'prop_name': props.prop_name,
  40. 'prop_value': props.prop_value,
  41. 'prop_title': props.prop_title,
  42. 'type': props.type
  43. }
  44. except Exception as e:
  45. logger.error(f"根据id查询属性失败: {str(e)}")
  46. raise ValueError("查询失败")
  47. def create_prop(self, prop_data: dict) -> KGProp:
  48. try:
  49. new_prop = KGProp(**prop_data)
  50. self.db.add(new_prop)
  51. self.db.commit()
  52. return new_prop
  53. except IntegrityError as e:
  54. self.db.rollback()
  55. logger.error(f"创建属性失败: {str(e)}")
  56. raise ValueError("数据库完整性错误")
  57. def update_prop(self, prop_id: int, update_data: dict) -> KGProp:
  58. prop = self.db.query(KGProp).get(prop_id)
  59. if not prop:
  60. raise ValueError("属性未找到")
  61. try:
  62. for key, value in update_data.items():
  63. setattr(prop, key, value)
  64. self.db.commit()
  65. return prop
  66. except Exception as e:
  67. self.db.rollback()
  68. logger.error(f"更新属性失败: {str(e)}")
  69. raise ValueError("更新失败")
  70. def delete_prop(self, prop_id: int) -> None:
  71. prop = self.db.query(KGProp).get(prop_id)
  72. if not prop:
  73. raise ValueError("属性未找到")
  74. try:
  75. self.db.delete(prop)
  76. self.db.commit()
  77. return None
  78. except Exception as e:
  79. self.db.rollback()
  80. logger.error(f"删除属性失败: {str(e)}")
  81. raise ValueError("删除失败")