databases.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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(
  13. sqlite_url,
  14. echo=False,
  15. pool_size=10,
  16. max_overflow=20,
  17. pool_timeout=30,
  18. pool_recycle=1800,
  19. )
  20. # 创建表
  21. def create_all_database():
  22. SQLModel.metadata.create_all(engine)
  23. # 创建会话
  24. def __get_session():
  25. with Session(engine) as session:
  26. try:
  27. yield session
  28. finally:
  29. session.close()
  30. def batch_insert_device_configs(session: Session, data_list: list):
  31. '''批量插入数据到设备配置表'''
  32. for data in data_list:
  33. device_config = DeviceConfig(**data)
  34. session.add(device_config)
  35. session.commit()
  36. session.close()
  37. def insert_photo_records(image_deal_mode: int, goods_art_no: str, image_index:int):
  38. session = SqlQuery()
  39. """批量插入数据到照片记录"""
  40. data = {
  41. "image_deal_mode": image_deal_mode,
  42. "goods_art_no": goods_art_no,
  43. "image_index": image_index,
  44. }
  45. device_config = PhotoRecord(**data)
  46. session.add(device_config)
  47. session.commit()
  48. session.close()
  49. return True
  50. # 创建一个通用的 CRUD 类
  51. class CRUD:
  52. def __init__(self, model):
  53. self.model = model
  54. def create(self, session: Session, obj_in):
  55. obj_in_data = dict(obj_in)
  56. db_obj = self.model(**obj_in_data)
  57. session.add(db_obj)
  58. session.commit()
  59. session.refresh(db_obj)
  60. session.close()
  61. return db_obj
  62. def read(
  63. self,
  64. session: Session,
  65. conditions: Optional[Dict] = None,
  66. order_by: Optional[str] = None,
  67. ascending: bool = True,
  68. ):
  69. query = select(self.model)
  70. if conditions:
  71. query = query.where(and_(*(getattr(self.model, key) == value for key, value in conditions.items())))
  72. if order_by:
  73. if ascending:
  74. query = query.order_by(asc(getattr(self.model, order_by)))
  75. else:
  76. query = query.order_by(desc(getattr(self.model, order_by)))
  77. data = session.exec(query).first()
  78. session.close()
  79. return data
  80. def read_all(
  81. self,
  82. session: Session,
  83. conditions: Optional[Dict] = None,
  84. order_by: Optional[str] = None,
  85. ascending: bool = True,
  86. ):
  87. query = select(self.model)
  88. if conditions:
  89. query = query.where(and_(*(getattr(self.model, key) == value for key, value in conditions.items())))
  90. if order_by:
  91. if ascending:
  92. query = query.order_by(asc(getattr(self.model, order_by)))
  93. else:
  94. query = query.order_by(desc(getattr(self.model, order_by)))
  95. data = session.exec(query).all()
  96. session.close()
  97. return data
  98. def update(self, session: Session, obj_id: int, **kwargs):
  99. db_obj = session.get(self.model, obj_id)
  100. for key, value in kwargs.items():
  101. if value == None or value =="":
  102. continue
  103. setattr(db_obj, key, value)
  104. session.commit()
  105. session.refresh(db_obj)
  106. session.close()
  107. return db_obj
  108. def deleteConditions(
  109. self,
  110. session: Session,
  111. conditions: Optional[Dict] = None,
  112. ):
  113. query = select(self.model)
  114. if conditions == None:
  115. return False
  116. query = query.where(
  117. and_(
  118. *(
  119. getattr(self.model, key) == value
  120. for key, value in conditions.items()
  121. )
  122. )
  123. )
  124. objects_to_delete = session.exec(query).all()
  125. for obj in objects_to_delete:
  126. session.delete(obj)
  127. session.commit()
  128. session.close()
  129. return True
  130. def delete(self, session: Session, obj_id: int):
  131. db_obj = session.get(self.model, obj_id)
  132. session.delete(db_obj)
  133. session.commit()
  134. session.close()
  135. def SqlQuery():
  136. return next(__get_session())
  137. # 使用示例
  138. if __name__ == "__main__":
  139. pass
  140. # 使用 next 函数从生成器中获取 Session 对象
  141. # session = SqlQuery()
  142. # 创建 CRUD 实例
  143. # device_config_crud = CRUD(DeviceConfig)
  144. # 创建新记录
  145. # new_device_config = DeviceConfig(
  146. # mode_type="example_mode",
  147. # execution_type="example_execution",
  148. # action_name="example_action",
  149. # action_index=1,
  150. # picture_index=1,
  151. # camera_height=100,
  152. # camera_angle=45.5,
  153. # number_focus=2,
  154. # take_picture=True,
  155. # turntable_position=10.0,
  156. # turntable_angle=30.5,
  157. # shoe_upturn=False,
  158. # pre_delay=1.5,
  159. # after_delay=2.5,
  160. # led_switch=True,
  161. # is_wait=False,
  162. # )
  163. # created_device_config = device_config_crud.create(session, new_device_config)
  164. # print(f"Created Device Config: {created_device_config}")
  165. # 读取记录
  166. # read_device = device_config_crud.read(session, 1)
  167. # print(f"Read Device Config: {read_device.model_dump()}")
  168. # 读取所有记录
  169. # all_devices = device_config_crud.read_all(session, conditions={"id": 2})
  170. # print(f"All Device Configs: {[device.model_dump() for device in all_devices]}")
  171. # # 更新记录
  172. # updated_device = device_config_crud.update(
  173. # session, created_device_config.id, mode_type="updated_mode"
  174. # )
  175. # print(f"Updated Device Config: {updated_device}")
  176. # # 删除记录
  177. # device_config_crud.delete(session, created_device_config.id)
  178. # print("Device Config deleted.")