kg_prop_service.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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_names: List[str] = None) -> List[dict]:
  12. try:
  13. query = self.db.query(KGProp).filter(KGProp.ref_id == ref_id)
  14. if prop_names:
  15. #prop_names是一个列表,需要使用in_方法进行查询
  16. query = query.filter(KGProp.prop_name.in_(prop_names))
  17. props = query.all()
  18. return [{
  19. 'id': p.id,
  20. 'category': p.category,
  21. 'prop_name': p.prop_name,
  22. 'prop_value': p.prop_value,
  23. 'prop_title': p.prop_title,
  24. 'type': p.type
  25. } for p in props]
  26. except Exception as e:
  27. logger.error(f"根据ref_id查询属性失败: {str(e)}")
  28. raise ValueError("查询失败")
  29. def get_props_by_id(self, id: int, prop_name: str = None) -> List[dict]:
  30. try:
  31. query = self.db.query(KGProp).filter(KGProp.id == id)
  32. if prop_name:
  33. query = query.filter(KGProp.prop_name == prop_name)
  34. props = query.first()
  35. if not props:
  36. raise ValueError("props not found")
  37. return {
  38. 'id': props.id,
  39. 'category': props.category,
  40. 'prop_name': props.prop_name,
  41. 'prop_value': props.prop_value,
  42. 'prop_title': props.prop_title,
  43. 'type': props.type
  44. }
  45. except Exception as e:
  46. logger.error(f"根据id查询属性失败: {str(e)}")
  47. raise ValueError("查询失败")
  48. def create_prop(self, prop_data: dict) -> KGProp:
  49. try:
  50. new_prop = KGProp(**prop_data)
  51. self.db.add(new_prop)
  52. self.db.commit()
  53. return new_prop
  54. except IntegrityError as e:
  55. self.db.rollback()
  56. logger.error(f"创建属性失败: {str(e)}")
  57. raise ValueError("数据库完整性错误")
  58. def update_prop(self, prop_id: int, update_data: dict) -> KGProp:
  59. prop = self.db.query(KGProp).get(prop_id)
  60. if not prop:
  61. raise ValueError("属性未找到")
  62. try:
  63. for key, value in update_data.items():
  64. setattr(prop, key, value)
  65. self.db.commit()
  66. return prop
  67. except Exception as e:
  68. self.db.rollback()
  69. logger.error(f"更新属性失败: {str(e)}")
  70. raise ValueError("更新失败")
  71. def delete_prop(self, prop_id: int) -> None:
  72. prop = self.db.query(KGProp).get(prop_id)
  73. if not prop:
  74. raise ValueError("属性未找到")
  75. try:
  76. self.db.delete(prop)
  77. self.db.commit()
  78. return None
  79. except Exception as e:
  80. self.db.rollback()
  81. logger.error(f"删除属性失败: {str(e)}")
  82. raise ValueError("删除失败")