|
|
@@ -1,13 +1,10 @@
|
|
|
-from networkx.algorithms.components import connected
|
|
|
from sqlmodel import Field, Session, SQLModel, create_engine, select
|
|
|
from typing import Dict
|
|
|
-from datetime import datetime
|
|
|
from typing import Optional
|
|
|
-import json
|
|
|
from sqlalchemy import and_, desc, asc
|
|
|
from utils.utils_func import check_path
|
|
|
-from sqlalchemy.dialects import sqlite
|
|
|
from model import DeviceConfig, PhotoRecord, SysConfigs, DeviceConfigTabs
|
|
|
+
|
|
|
check_path("C:/Zhihuiyin")
|
|
|
# 创建SQLite数据库引擎
|
|
|
sqlite_file_name = "C:/Zhihuiyin/database.db"
|
|
|
@@ -15,6 +12,7 @@ sqlite_url = f"sqlite:///{sqlite_file_name}"
|
|
|
engine = create_engine(
|
|
|
sqlite_url,
|
|
|
echo=False,
|
|
|
+ connect_args={"check_same_thread": False}, # 允许多线程访问
|
|
|
pool_size=10,
|
|
|
max_overflow=20,
|
|
|
pool_timeout=30,
|
|
|
@@ -36,54 +34,6 @@ def __get_session():
|
|
|
session.close()
|
|
|
|
|
|
|
|
|
-def batch_insert_device_configs(session: Session, action_tabs: list, data_list: list):
|
|
|
- """批量插入数据到设备配置表"""
|
|
|
- for idx, tab in enumerate(action_tabs):
|
|
|
- crud = CRUD(DeviceConfigTabs)
|
|
|
- device_tab = DeviceConfigTabs(
|
|
|
- mode_type=tab.get("mode_type"),
|
|
|
- mode_name=tab.get("mode_name"),
|
|
|
- )
|
|
|
- create_obj = crud.create(session, obj_in=device_tab)
|
|
|
- for data in data_list:
|
|
|
- data["tab_id"] = create_obj.id
|
|
|
- data["is_system"] = False
|
|
|
- if idx in [0, 6]:
|
|
|
- data["is_system"] = True
|
|
|
- device_config = DeviceConfig(**data)
|
|
|
- session.add(device_config)
|
|
|
- session.commit()
|
|
|
- session.close()
|
|
|
-
|
|
|
-
|
|
|
-def batch_insert_sys_configs(session: Session, data_list: list):
|
|
|
- """批量插入数据到设备配置表"""
|
|
|
- for data in data_list:
|
|
|
- config = SysConfigs(**data)
|
|
|
- session.add(config)
|
|
|
- session.commit()
|
|
|
- session.close()
|
|
|
-
|
|
|
-
|
|
|
-def insert_photo_records(
|
|
|
- image_deal_mode: int, goods_art_no: str, image_index: int, action_id: int
|
|
|
-):
|
|
|
- session = SqlQuery()
|
|
|
- """批量插入数据到照片记录"""
|
|
|
- data = {
|
|
|
- "image_deal_mode": image_deal_mode,
|
|
|
- "goods_art_no": goods_art_no,
|
|
|
- "image_index": image_index,
|
|
|
- "action_id": action_id,
|
|
|
- }
|
|
|
- device_config = PhotoRecord(**data)
|
|
|
- session.add(device_config)
|
|
|
- session.commit()
|
|
|
- record_id = device_config.id
|
|
|
- session.close()
|
|
|
- return True, record_id
|
|
|
-
|
|
|
-
|
|
|
# 创建一个通用的 CRUD 类
|
|
|
class CRUD:
|
|
|
def __init__(self, model):
|
|
|
@@ -95,7 +45,6 @@ class CRUD:
|
|
|
session.add(db_obj)
|
|
|
session.commit()
|
|
|
session.refresh(db_obj)
|
|
|
- session.close()
|
|
|
return db_obj
|
|
|
|
|
|
def read(
|
|
|
@@ -121,7 +70,6 @@ class CRUD:
|
|
|
else:
|
|
|
query = query.order_by(desc(getattr(self.model, order_by)))
|
|
|
data = session.exec(query).first()
|
|
|
- session.close()
|
|
|
return data
|
|
|
|
|
|
def read_all(
|
|
|
@@ -162,43 +110,16 @@ class CRUD:
|
|
|
else:
|
|
|
query = query.order_by(desc(getattr(self.model, order_by)))
|
|
|
data = session.exec(query).all()
|
|
|
- session.close()
|
|
|
return data
|
|
|
|
|
|
def update(self, session: Session, obj_id: int, **kwargs):
|
|
|
db_obj = session.get(self.model, obj_id)
|
|
|
for key, value in kwargs.items():
|
|
|
- # if value == None or value == "":
|
|
|
- # continue
|
|
|
setattr(db_obj, key, value)
|
|
|
session.commit()
|
|
|
session.refresh(db_obj)
|
|
|
- session.close()
|
|
|
return db_obj
|
|
|
|
|
|
- def updateConditions(
|
|
|
- self, session: Session, conditions: Optional[Dict] = None, **kwargs
|
|
|
- ):
|
|
|
- query = select(self.model)
|
|
|
- if conditions:
|
|
|
- query = query.where(
|
|
|
- and_(
|
|
|
- *(
|
|
|
- getattr(self.model, key) == value
|
|
|
- for key, value in conditions.items()
|
|
|
- )
|
|
|
- )
|
|
|
- )
|
|
|
- data = session.exec(query).first()
|
|
|
- for key, value in kwargs.items():
|
|
|
- if value == None or value == "":
|
|
|
- continue
|
|
|
- setattr(data, key, value)
|
|
|
- session.commit()
|
|
|
- session.refresh(data)
|
|
|
- session.close()
|
|
|
- return data
|
|
|
-
|
|
|
def deleteConditions(
|
|
|
self,
|
|
|
session: Session,
|
|
|
@@ -219,14 +140,88 @@ class CRUD:
|
|
|
for obj in objects_to_delete:
|
|
|
session.delete(obj)
|
|
|
session.commit()
|
|
|
- session.close()
|
|
|
+ # session.refresh()
|
|
|
return True
|
|
|
|
|
|
def delete(self, session: Session, obj_id: int):
|
|
|
db_obj = session.get(self.model, obj_id)
|
|
|
session.delete(db_obj)
|
|
|
session.commit()
|
|
|
- session.close()
|
|
|
+ # session.refresh()
|
|
|
+
|
|
|
+ # 恢复 updateConditions 方法
|
|
|
+ def updateConditions(self, session: Session, conditions: Dict, **kwargs):
|
|
|
+ """
|
|
|
+ 根据条件更新记录
|
|
|
+ :param session: 数据库会话
|
|
|
+ :param conditions: 更新条件字典
|
|
|
+ :param kwargs: 需要更新的字段和值
|
|
|
+ :return: 更新后的对象
|
|
|
+ """
|
|
|
+ query = select(self.model).where(
|
|
|
+ and_(
|
|
|
+ *(
|
|
|
+ getattr(self.model, key) == value
|
|
|
+ for key, value in conditions.items()
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+ result = session.exec(query).first()
|
|
|
+ if result:
|
|
|
+ for key, value in kwargs.items():
|
|
|
+ setattr(result, key, value)
|
|
|
+ session.commit() # 提交事务以保存更改
|
|
|
+ return result
|
|
|
+ return None
|
|
|
+
|
|
|
+
|
|
|
+# 批量插入数据到设备配置表
|
|
|
+def batch_insert_device_configs(session: Session, action_tabs: list, data_list: list):
|
|
|
+ """批量插入数据到设备配置表"""
|
|
|
+ for idx, tab in enumerate(action_tabs):
|
|
|
+ crud = CRUD(DeviceConfigTabs)
|
|
|
+ device_tab = DeviceConfigTabs(
|
|
|
+ mode_type=tab.get("mode_type"),
|
|
|
+ mode_name=tab.get("mode_name"),
|
|
|
+ )
|
|
|
+ create_obj = crud.create(session, obj_in=device_tab)
|
|
|
+ for data in data_list:
|
|
|
+ data["tab_id"] = create_obj.id
|
|
|
+ data["is_system"] = False
|
|
|
+ if idx in [0, 6]:
|
|
|
+ data["is_system"] = True
|
|
|
+ device_config = DeviceConfig(**data)
|
|
|
+ session.add(device_config)
|
|
|
+ session.commit() # 合并事务提交
|
|
|
+
|
|
|
+
|
|
|
+# 批量插入系统配置
|
|
|
+def batch_insert_sys_configs(session: Session, data_list: list):
|
|
|
+ """批量插入数据到设备配置表"""
|
|
|
+ for data in data_list:
|
|
|
+ config = SysConfigs(**data)
|
|
|
+ session.add(config)
|
|
|
+ session.commit() # 合并事务提交
|
|
|
+
|
|
|
+
|
|
|
+# 插入照片记录
|
|
|
+async def insert_photo_records(
|
|
|
+ image_deal_mode: int, goods_art_no: str, image_index: int, action_id: int
|
|
|
+):
|
|
|
+ with SqlQuery() as session: # 使用上下文管理器复用会话
|
|
|
+ """批量插入数据到照片记录"""
|
|
|
+ data = {
|
|
|
+ "image_deal_mode": image_deal_mode,
|
|
|
+ "goods_art_no": goods_art_no,
|
|
|
+ "image_index": image_index,
|
|
|
+ "action_id": action_id,
|
|
|
+ }
|
|
|
+ device_config = PhotoRecord(**data)
|
|
|
+ session.add(device_config)
|
|
|
+ session.commit()
|
|
|
+ session.refresh(device_config)
|
|
|
+ record_id = device_config.id
|
|
|
+ return True, record_id
|
|
|
|
|
|
|
|
|
def SqlQuery():
|