コード例 #1
0
 def rollback(self):
     """
     手动回滚
     :return:
     """
     try:
         self._session.rollback()
     except Exception as e:
         logger.error(e)
コード例 #2
0
 def commit(self):
     """
     提交
     :return:
     """
     try:
         self._session.commit()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return True
コード例 #3
0
 def delete_sql(self, sql):
     """
     删除sql
     :param sql:
     :return:
     """
     try:
         self._session.execute(sql)
         self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return True
コード例 #4
0
 def select_sql(self, sql):
     """
     查询sql
     :param sql:
     :return:
     """
     try:
         result = self._session.execute(sql).fetchall()
         self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return result
コード例 #5
0
 def delete(self, ins):
     """
     模型 删除
     :param ins:
     :return:
     """
     try:
         self._session.delete(ins)
         self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return True
コード例 #6
0
 def save(self, ins):
     """
     模型 新增 保存
     :param ins:
     :return:
     """
     try:
         self._session.add(ins)
         self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return ins
コード例 #7
0
 def save(self):
     """
     保存
     :param is_commit:
     :return:
     """
     try:
         db.session.add(self)
         db.session.commit()
         return self
     except Exception as e:
         db.session.rollback()
         logger.error(e)
         return 0
コード例 #8
0
 def deleteList(self, inss: list):
     """
     模型 批量删除
     :param inss:
     :return:
     """
     try:
         for ins in inss:
             self._session.delete(ins)
             self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return True
コード例 #9
0
 def delete(self):
     """
     删除
     :param is_commit:
     :return:
     """
     try:
         db.session.delete(self)
         db.session.commit()
         return True
     except Exception as e:
         # 加入数据库commit提交失败,必须回滚!!!
         db.session.rollback()
         logger.error(e)
         return 0
コード例 #10
0
 def update(self, **kwargs):
     """
     更新
     :param is_commit:
     :param kwargs:
     :return:
     """
     try:
         for key, value in kwargs.items():
             setattr(self, key, value)
         return self.save()
     except Exception as e:
         db.session.rollback()
         logger.error(e)
         return 0
コード例 #11
0
    def update_sql(self, sql):
        """
        sql 更新
        如 获取 更新后的数据 ,单个 可使用 get_cls_by_id,多个 执行sql
        :param sql:
        :return:
        """

        try:
            self._session.execute(sql)
            self._session.flush()
        except Exception as e:
            self._session.rollback()
            logger.error(e)
            return False
        return True
コード例 #12
0
 def insert_sql(self, sql):
     """
     sql 插入
     如 获取 新增后的数据 ,单个 可使用 get_cls_by_id,多个 执行sql
     :param sql:
     :param table_name:
     :param only_key:
     :return:
     """
     try:
         self._session.execute(sql)
         self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return True
コード例 #13
0
 def update(self, ins, dataDict):
     """
     模型更新
     :param ins: object
     :param dataDict: 更新信息
     :return:
     """
     try:
         for key, value in dataDict.items():
             setattr(ins, key, value)
         self._session.add(ins)
         self._session.flush()
     except Exception as e:
         self._session.rollback()
         logger.error(e)
         return False
     return ins
コード例 #14
0
def serachView(dataDict: dict,
               tableName: db.Model,
               groupBy: str = "",
               orderByStr: str = "",
               otherCondition: str = ""):
    """
    reqeusts args:
    {
        "condition":[
            {"field":"id","op":"equal","value":1},
            {"field":"id","op":"notequal","value":2},
            {"field":"id","op":"notin","value":"(2)"},
            {"field":"id","op":"in","value":"(1,2)"},
            {"field":"id","op":"less","value":3},
            {"field":"id","op":"greater","value":0},
            {"field":"id","op":"llike","value":1},
            {"field":"id","op":"rlike","value":1},
            {"field":"id","op":"like","value":1}
        ],
        "page":{"pageIndex":1,"pageSize":30},
        "multiSort":{"id":"desc"}
    }
    # example:
        groupBy = " group by id "
        orderByStr = " order by sort_id desc "
        otherCondition = " id != 99 "
        resultList = serachView(dataDict, tablename, groupBy=groupBy, orderByStr=orderByStr,otherCondition=otherCondition)
    # id =  1  and id !=  2  and id not in  (2)  and id in  (1,2)  and id <  3  and id >  0  and id like  '%1'  and id like  '1%'  and id like  '%1%'  order by id desc limit 0,30
    :param dataDict:
    :param tableName:
    :param sqlStr:
    :param groupBy:
    :param orderByStr:
    :param deptIdConditonStr:
    :return:
    """
    opDic = {
        "in": "in",
        "notin": "not in",
        "equal": "=",
        "notequal": "!=",
        "less": "<",
        "greater": ">",
        "is": "is",
        "llike": "like",
        "rlike": "like",
        "like": "like",
        "contains": "like"
    }

    # 排序编辑
    multiSort: dict = dataDict.get("multiSort", {})
    if multiSort:
        orderList = []
        for key, value in multiSort.items():
            orderStr = f"{key} {value}"
            orderList.append(orderStr)
        if orderByStr and orderList:
            orderByStr += ","
        orderByStr += " , ".join(orderList)

    # 条件编辑
    condition: list = dataDict.get("condition", [])
    sqlStr: str = ""
    if condition:
        conditionList: list = []
        for cond in condition:
            field, op, value = cond["field"], cond["op"], cond["value"]
            if field not in tableName.__table__.columns:
                # 如果模型中没有此字段 就跳过
                continue
            if op == "llike":
                sql_condition = f"{field} {opDic[op]}  '%{str(value)}'"
            elif op == "rlike":
                sql_condition = f"{field} {opDic[op]}  '{str(value)}%'"
            elif op == "like":
                sql_condition = f"{field} {opDic[op]}  '%{str(value)}%'"
            elif op in ["in", "not in", "is"]:
                sql_condition = f"{field} {opDic[op]}  '{str(value)}'"
            else:
                sql_condition = f"{field} {opDic[op]}  {str(value)}"
            conditionList.append(sql_condition)
        sqlStr = " and ".join(conditionList)
    if sqlStr.strip():
        if otherCondition:
            sqlStr = sqlStr + " and " + otherCondition
        else:
            sqlStr = sqlStr
    else:
        sqlStr = otherCondition
    # 分页编辑
    pageDic: dict = dataDict.get("page", {})
    pageIndex: int = pageDic.get("pageIndex", 1)
    pageSize: int = pageDic.get("pageSize", 20)
    if pageIndex <= 0: pageIndex = 1
    if pageSize > 50: pageSize = 50
    try:
        sqlStrquery = text(sqlStr)
        orderByStr = text(orderByStr.strip())
        groupBy = text(groupBy.strip())
        if sqlStr.strip():
            tableList = tableName.query.filter(sqlStrquery).group_by(
                groupBy).order_by(orderByStr)
        else:
            tableList = tableName.query.group_by(groupBy).order_by(orderByStr)
            # 这样返回可以使用更多分页的特性
        return tableList.paginate(pageIndex,
                                  per_page=pageSize,
                                  error_out=False)
    except Exception as e:
        logger.error(e)
        return []