databases.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from networkx.algorithms.components import connected
  2. from sqlmodel import Field, Session, SQLModel, create_engine, select
  3. from typing import Dict
  4. from datetime import datetime
  5. from typing import Optional
  6. import json
  7. from sqlalchemy import and_, asc,desc
  8. from model import DeviceConfig, PhotoRecord
  9. # 创建SQLite数据库引擎
  10. sqlite_file_name = "database.db"
  11. sqlite_url = f"sqlite:///{sqlite_file_name}"
  12. engine = create_engine(sqlite_url, echo=True)
  13. # 创建表
  14. def create_all_database():
  15. SQLModel.metadata.create_all(engine)
  16. # 创建会话
  17. def __get_session():
  18. with Session(engine) as session:
  19. yield session
  20. def batch_insert_device_configs(session: Session, data_list: list):
  21. '''批量插入数据到设备配置表'''
  22. for data in data_list:
  23. device_config = DeviceConfig(**data)
  24. session.add(device_config)
  25. session.commit()
  26. # 创建一个通用的 CRUD 类
  27. class CRUD:
  28. def __init__(self, model):
  29. self.model = model
  30. def create(self, session: Session, obj_in):
  31. obj_in_data = dict(obj_in)
  32. db_obj = self.model(**obj_in_data)
  33. session.add(db_obj)
  34. session.commit()
  35. session.refresh(db_obj)
  36. return db_obj
  37. def read(
  38. self,
  39. session: Session,
  40. conditions: Optional[Dict] = None,
  41. order_by: Optional[str] = None,
  42. ascending: bool = True,
  43. ):
  44. query = select(self.model)
  45. if conditions:
  46. query = query.where(and_(*(getattr(self.model, key) == value for key, value in conditions.items())))
  47. if order_by:
  48. if ascending:
  49. query = query.order_by(asc(getattr(self.model, order_by)))
  50. else:
  51. query = query.order_by(desc(getattr(self.model, order_by)))
  52. return session.exec(query).first()
  53. def read_all(
  54. self,
  55. session: Session,
  56. conditions: Optional[Dict] = None,
  57. order_by: Optional[str] = None,
  58. ascending: bool = True,
  59. ):
  60. query = select(self.model)
  61. if conditions:
  62. query = query.where(and_(*(getattr(self.model, key) == value for key, value in conditions.items())))
  63. if order_by:
  64. if ascending:
  65. query = query.order_by(asc(getattr(self.model, order_by)))
  66. else:
  67. query = query.order_by(desc(getattr(self.model, order_by)))
  68. return session.exec(query).all()
  69. def update(self, session: Session, obj_id: int, **kwargs):
  70. db_obj = session.get(self.model, obj_id)
  71. for key, value in kwargs.items():
  72. if value == None or value =="":
  73. continue
  74. setattr(db_obj, key, value)
  75. session.commit()
  76. session.refresh(db_obj)
  77. return db_obj
  78. def delete(self, session: Session, obj_id: int):
  79. db_obj = session.get(self.model, obj_id)
  80. session.delete(db_obj)
  81. session.commit()
  82. def SqlQuery():
  83. return next(__get_session())
  84. # 使用示例
  85. if __name__ == "__main__":
  86. pass
  87. # 使用 next 函数从生成器中获取 Session 对象
  88. # session = SqlQuery()
  89. # 创建 CRUD 实例
  90. # device_config_crud = CRUD(DeviceConfig)
  91. # 创建新记录
  92. # new_device_config = DeviceConfig(
  93. # mode_type="example_mode",
  94. # execution_type="example_execution",
  95. # action_name="example_action",
  96. # action_index=1,
  97. # picture_index=1,
  98. # camera_height=100,
  99. # camera_angle=45.5,
  100. # number_focus=2,
  101. # take_picture=True,
  102. # turntable_position=10.0,
  103. # turntable_angle=30.5,
  104. # shoe_upturn=False,
  105. # pre_delay=1.5,
  106. # after_delay=2.5,
  107. # led_switch=True,
  108. # is_wait=False,
  109. # )
  110. # created_device_config = device_config_crud.create(session, new_device_config)
  111. # print(f"Created Device Config: {created_device_config}")
  112. # 读取记录
  113. # read_device = device_config_crud.read(session, 1)
  114. # print(f"Read Device Config: {read_device.model_dump()}")
  115. # 读取所有记录
  116. # all_devices = device_config_crud.read_all(session, conditions={"id": 2})
  117. # print(f"All Device Configs: {[device.model_dump() for device in all_devices]}")
  118. # # 更新记录
  119. # updated_device = device_config_crud.update(
  120. # session, created_device_config.id, mode_type="updated_mode"
  121. # )
  122. # print(f"Updated Device Config: {updated_device}")
  123. # # 删除记录
  124. # device_config_crud.delete(session, created_device_config.id)
  125. # print("Device Config deleted.")