def db_insert(*args): ''' 数据库插入 :param args:参数可以是1个或者2个,1个的话就是sql语句,调用默认服务,2个的话第一个参数是数据服务key,第2个是sql语句。 :return: 插入结果 ''' dbKey = "default" sqlstring = "" if len(args) == 1: sqlstring = args[0].strip() elif len(args) == 2: dbKey = args[0].strip() sqlstring = args[1].strip() else: set_result("ERROR", "执行db_select()时参数个数错误。") return "<ERROR:参数个数错误>" # 如果是更新或者删除或者插入操作,提示错误 if sqlstring.strip().lower().startswith( "select ") or sqlstring.strip().lower().startswith( "update ") or sqlstring.strip().lower().startswith("delete "): set_result("ERROR", "<ERROR:只能使用INSERT语句>") return "<ERROR:只能使用INSERT语句>" if "update " in sqlstring.strip().lower() or "delete " in sqlstring.strip( ).lower(): set_result("ERROR", "<ERROR:不能包含UPDATE/DELETE操作!>") return "<ERROR:不能包含UPDATE/DELETE操作!>" if dbKey in context.serviceDBDict.keys(): db = context.serviceDBDict[dbKey] else: set_result("ERROR", "<ERROR:没有找到数据库%s的配置>" % dbKey) return "<ERROR:没有找到数据库%s的配置>" % dbKey # paramList = splitStringToListByTag(strTobeProcessed, splitTag) if db.connect() == False: set_result("ERROR", "<ERROR:service[%s]数据库连接异常>" % dbKey) return "<ERROR:service[%s]数据库连接异常>" % dbKey db.setCursorDict(True) res = db.execute_update_sql(sqlstring.strip()) db.release() if isinstance(res, bool) and res == False: # check是否加了dbname.tablename fromTable = get_sub_string(sqlstring.strip().lower(), "insert into ", "(").strip() if fromTable and "." not in fromTable: set_result("ERROR", "<ERROR:sql语句中的表名%s格式必须是database.table>" % fromTable) return "<ERROR:sql语句中的表名%s格式必须是database.table>" % fromTable else: set_result("ERROR", "<ERROR:执行sql发生异常,请检查sql语句:%s>" % sqlstring.strip()) return "<ERROR:执行sql发生异常,请检查sql语句:%s>" % sqlstring.strip() else: return str(res)
def db_delete(*args): ''' 数据库删除 :param args:参数可以是1个或者2个,1个的话就是sql语句,调用默认服务,2个的话第一个参数是数据服务key,第2个是sql语句。 :return: 删除结果 ''' dbKey = "default" sqlstring = "" if len(args) == 1: sqlstring = args[0] elif len(args) == 2: dbKey = args[0] sqlstring = args[1] else: set_result("ERROR", "执行db_select()时参数个数错误。") return "<ERROR:参数个数错误>" # 如果是更新或者删除或者插入操作,提示错误 if sqlstring.strip().lower().startswith("select ") or sqlstring.strip().lower().startswith( "update ") or sqlstring.strip().lower().startswith("insert "): set_result("ERROR", "<ERROR:只能使用DELETE语句>") return "<ERROR:只能使用DELETE语句>" if "update " in sqlstring.strip().lower() or "insert " in sqlstring.strip().lower(): set_result("ERROR", "<ERROR:不能包含UPDATE/INSERT操作!>") return "<ERROR:不能包含UPDATE/INSERT操作!>" if " where " not in sqlstring.strip().lower(): set_result("ERROR", "<ERROR:必须包含where子句!>") return "<ERROR:必须包含where子句!>" if dbKey in context.serviceDBDict.keys(): db = context.serviceDBDict[dbKey] else: set_result("ERROR", "<ERROR:没有找到数据库%s的配置,请联系管理员添加!>" % dbKey) return "<ERROR:没有找到数据库%s的配置>" % dbKey # paramList = splitStringToListByTag(strTobeProcessed, splitTag) if db.connect() == False: set_result("ERROR", "<ERROR:service[%s]数据库连接异常>" % dbKey) return "<ERROR:service[%s]数据库连接异常>" % dbKey db.setCursorDict(True) # 判断影响行数 if db.get_effected_rows_count(sqlstring.strip()) > 100: db.release() set_result("ERROR", "<ERROR:DB_DELETE一次删除数据不得超过100行,请检查where子句。>") return "<ERROR:DB_DELETE一次删除数据不得超过100行,请检查where子句。>" res = db.execute_update_sql(sqlstring.strip()) db.release() if isinstance(res,bool) and res == False: # check是否加了dbname.tablename fromTable = get_sub_string(sqlstring.strip().lower(), "from ", " where").strip() if fromTable and "." not in fromTable: set_result("ERROR","<ERROR:sql语句中的表名%s格式必须是database.table>" % fromTable) return "<ERROR:sql语句中的表名%s格式必须是database.table>" % fromTable else: set_result("ERROR","<ERROR:执行sql发生异常,请检查sql语句:%s>" % sqlstring.strip()) return "<ERROR:执行sql发生异常,请检查sql语句:%s>" % sqlstring.strip() else: return str(res)
def db_select(*args): ''' 数据库查询 :param args:参数可以是1个或者2个,1个的话就是sql语句,调用默认服务,2个的话第一个参数是数据服务key,第2个是sql语句。 :return: sql查询的dict ''' dbKey = "default" sqlstring = "" if len(args) == 1: sqlstring = args[0] elif len(args) == 2: dbKey = args[0] sqlstring = args[1] else: set_result("ERROR","执行db_select()时参数个数错误。") return "<ERROR:参数个数错误>" # 如果是更新或者删除或者插入操作,提示错误 if sqlstring.strip().lower().startswith("update ") or sqlstring.strip().lower().startswith( "delete ") or sqlstring.strip().lower().startswith("insert "): set_result("ERROR","执行db_select()时只能使用SELECT语句。") return "<ERROR:只能使用SELECT语句>" if "delete " in sqlstring.strip().lower() or "update " in sqlstring.strip().lower() or "insert " in sqlstring.strip().lower(): set_result("ERROR","执行db_select()时不能包含UPDATE/DELETE/INSERT操作!") return "<ERROR:不能包含UPDATE/DELETE/INSERT操作!>" if "where " not in sqlstring.strip().lower(): set_result("ERROR","执行db_select()时必须包含where子句!") return "<ERROR:必须包含where子句!>" # 兼容旧的 if not sqlstring.strip().lower().startswith("select "): set_result("ERROR","执行db_select()时开头必须是select!") return "<ERROR:使用db_select时,开头必须是select。>" if dbKey in context.serviceDBDict.keys(): db = context.serviceDBDict[dbKey] else: set_result("ERROR","<ERROR:没有找到数据库%s的配置>" % dbKey) return "<ERROR:没有找到数据库%s的配置>" % dbKey # paramList = splitStringToListByTag(strTobeProcessed, splitTag) sqlstring = core.processor.CP.CP.getProcessedValue(sqlstring, context) if db.connect() == False: set_result("ERROR","<ERROR:service[%s]数据库连接异常>" % dbKey) return "<ERROR:service[%s]数据库连接异常>" % dbKey db.setCursorDict(True) # 判断影响行数 if db.get_effected_rows_count(sqlstring.strip()) > 100: db.release() set_result("ERROR","<ERROR:DB_SELECT查询数据不得超过100行,请检查where子句。>") return "<ERROR:DB_SELECT查询数据不得超过100行,请检查where子句。>" res = db.execute_sql(sqlstring.strip()) db.release() retList = [] if isinstance(res,bool) and res == False: # check是否加了dbname.tablename fromTable = get_sub_string(sqlstring.strip().lower(), "from ", " where").strip() if fromTable and "." not in fromTable: set_result("ERROR","<ERROR:sql语句中的表名%s格式必须是database.table>" % fromTable) return "<ERROR:sql语句中的表名%s格式必须是database.table>" % fromTable else: set_result("ERROR","<ERROR:执行sql发生异常,请检查sql语句:%s>" % sqlstring.strip()) return "<ERROR:执行sql发生异常,请检查sql语句:%s>" % sqlstring.strip() for tmpObj in res: tmpDict = {} for tmpK, tmpV in tmpObj.items(): if isinstance(tmpV,datetime.datetime): # 如果是datetime类型的,无法转换为json,要先转换为字符串 tmpDict[tmpK] = str(tmpV) elif isinstance(tmpV, decimal.Decimal): tmpDict[tmpK] = str(decimal.Decimal(tmpV)) else: tmpDict[tmpK] = tmpV retList.append(tmpDict) return json.dumps(retList)