6、监测数据采集物联网应用开发步骤(5.2)

  1. 监测数据采集物联网应用开发步骤(5.1)

包含4个类数据库连接(com.zxy.db_Self.ConnectionPool_Self.py)、数据库操作类(com.zxy.db_Self.Db_Common_Self.py)、数据库管理类(com.zxy.db_Self.DBManager_Self.py)、数据库连接池类(com.zxy.db_Self.PooledConnection_Self.py)

据库连接(com.zxy.db_Self.ConnectionPool_Self.py

python 复制代码
#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''

import sqlite3,time,mysql.connector,threading
from com.zxy.z_debug import z_debug
from com.zxy.db_Self.PooledConnection_Self import PooledConnection_Self

#监测数据采集物联网应用--数据库连接
class ConnectionPool_Self(z_debug):
    attJdbcDriver = ""
    attDbUrl = ""
    attDbUsername = ""
    attDbPassword = ""
    attInitialConnections = 5
    attIncrementalConnections = 2
    attMaxConnections = 10
    attPooledConnection_Selfs = []
    
    def __init__(self, inputJdbcDriver, inputDbUrl, inputDbUsername, inputDbPassword): 
        self.attJdbcDriver = inputJdbcDriver
        if inputJdbcDriver == "org.sqlite.JDBC":
            self.attInitialConnections = 2
            self.attMaxConnections = 5
        self.attDbUrl = inputDbUrl
        self.attDbUsername = inputDbUsername
        self.attDbPassword = inputDbPassword
        try:
            self.createPool()
        except Exception as e:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
        finally:
            pass
    
    def createPool(self):
        if len(self.attPooledConnection_Selfs) == 0:
            lock = threading.Lock()
            if lock.acquire():
                self.createConnections(self.attInitialConnections) 
                if str(type(self)) == "<class 'type'>":
                    self.debug_in(self,"myself db create pool")#打印异常信息
                else:
                    self.debug_in("myself db create pool")#打印异常信息
                lock.release()

    def createConnections(self, inputNumConnections):
        if self.attMaxConnections > 0 and len(self.attPooledConnection_Selfs) >= self.attMaxConnections:            
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,"myself db connections is max")#打印异常信息
            else:
                self.debug_in("myself db connections is max")#打印异常信息
            self.findFreeConnection()
        
        for iIndex in range(1,inputNumConnections):
            try:
                temCon = self.newConnection()
                temPolCon = PooledConnection_Self(temCon)
                self.attPooledConnection_Selfs.append(temPolCon)            
            except Exception as e:
                if str(type(self)) == "<class 'type'>":
                    self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
                else:
                    self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
         
    def newConnection(self):        
        if self.attJdbcDriver == "org.sqlite.JDBC":
            temConn = sqlite3.connect(self.attDbUrl,check_same_thread = False)
            return temConn
        elif self.attJdbcDriver == "com.mysql.jdbc.Driver":
            try:
                temConn = mysql.connector.Connect(host=self.attDbUrl.split(":")[0],user=self.attDbUsername,db=self.attDbUrl.split(":")[2],passwd=self.attDbPassword,port=self.attDbUrl.split(":")[1])
                return temConn
            except Exception as e:
                if str(type(self)) == "<class 'type'>":
                    self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
                else:
                    self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
        else:
            return None
        
    def getConnection(self):
        temReturnResult = None
        lock = threading.Lock()
        if lock.acquire():
            if len(self.attPooledConnection_Selfs) == 0:
                return None
            else:
                temReturnResult = self.getFreeConnection()    
                while self.attPooledConnection_Selfs is None:
                    time.sleep(0.2)
                    temReturnResult = self.getFreeConnection()
            lock.release()
        return temReturnResult
    
    def getFreeConnection(self):
        temConn_self = self.findFreeConnection()
        if temConn_self is None:
            self.createConnections(self.attIncrementalConnections)
            temConn_self = self.findFreeConnection()
            if temConn_self is None:
                return None
        return temConn_self

    def findFreeConnection(self):
        temPc = None
        while temPc is None:
            for i in range(len(self.attPooledConnection_Selfs)):
                temPc = self.attPooledConnection_Selfs[i]
                if temPc.attBusy == False or temPc.attConnection is None:
                    temPc.attBusy = True
                    try:
                        if temPc.attConnection is None :
                            temPc.attConnection = self.newConnection()                        
                    except Exception as e:
                        del self.attPooledConnection_Selfs[i]
                        i = i - 1
                        if str(type(self)) == "<class 'type'>":
                            self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
                        else:
                            self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
                        continue
                    break
                if temPc.attConnection is not None:
                    break
                else:
                    time.sleep(0.5)
        return temPc
    
    def closeConnection(self,inputConn):
        try:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,"the myself close db")#打印异常信息
            else:
                self.debug_in("the myself close db")#打印异常信息
            inputConn.close()
        except Exception as e:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
    
    def returnConnection(self,inputConn):
        if len(self.attPooledConnection_Selfs) == 0:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,"myself db  returnConnection!")#打印异常信息
            else:
                self.debug_in("myself db  returnConnection!")#打印异常信息
            return None
        
        for i in range(len(self.attPooledConnection_Selfs)):
            temPConn = self.attPooledConnection_Selfs[i]            
            if temPConn.attConnection == inputConn and temPConn.attBusy:
                temPConn.attBusy = False
                Break

数据库操作类(com.zxy.db_Self.Db_Common_Self.py

python 复制代码
#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''

from com.zxy.adminlog.UsAdmin_Log import UsAdmin_Log
from com.zxy.common import Com_Para
from com.zxy.db_Self.DBManager_Self import DBManager_Self
from com.zxy.z_debug import z_debug

#监测数据采集物联网应用--数据库操作
class Db_Common_Self(z_debug):    
    attSqlException = ""
    attRs_out = None
    attConn_a = None
    attColumnNames = []
    
    def __init__(self):
        pass

    def Common_SqlNoCommit(self, inputStrSql):
        temRs = None
        try:
            temDs = DBManager_Self()
            self.attConn_a = temDs.getConnection()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.acquire()
            temRs = self.attConn_a.executeQueryNoCommit(inputStrSql)         
        except Exception as e:            
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputStrSql+"==>"+repr(e)
                self.debug_in(self,inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputStrSql+"==>"+repr(e)
                self.debug_in(inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            temDs.returnConnection(self.attConn_a.attConnection)
            self.Close_Conn()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.release()
        return temRs
    
    def Common_Sql(self, inputStrSql):
        temRs = None
        try:
            temDs = DBManager_Self()
            self.attConn_a = temDs.getConnection()
            temRs = self.attConn_a.executeQuery(inputStrSql) 
            self.attColumnNames = self.attConn_a.attColumnNames          
        except Exception as e:        
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputStrSql+"==>"+repr(e)
                self.debug_in(self,inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputStrSql+"==>"+repr(e)
                self.debug_in(inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            temDs.returnConnection(self.attConn_a.attConnection)
            self.Close_Conn()
        return temRs
    
    def CommonExec_SqlRowID(self, inputStrSql):
        temIResult = -1
        try:
            temDs = DBManager_Self()
            self.attConn_a = temDs.getConnection()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.acquire()
            temIResult = self.attConn_a.executeUpdateRowID(inputStrSql)         
        except Exception as e:        
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputStrSql+"==>"+repr(e)
                self.debug_in(self,inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputStrSql+"==>"+repr(e)
                self.debug_in(inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
            temIResult = -1
        finally:
            temDs.returnConnection(self.attConn_a.attConnection)
            self.Close_Conn()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.release()
        return temIResult
    
    def CommonExec_Sql(self, inputStrSql):
        temIResult = -1
        try:
            temDs = DBManager_Self()
            self.attConn_a = temDs.getConnection()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.acquire()
            temIResult = self.attConn_a.executeUpdate(inputStrSql)         
        except Exception as e:
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputStrSql+"==>"+repr(e)
                self.debug_in(self,inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputStrSql+"==>"+repr(e)
                self.debug_in(inputStrSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
            temIResult = -1
        finally:
            temDs.returnConnection(self.attConn_a.attConnection)
            self.Close_Conn()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.release()
        return temIResult    
      
#     ProName 存储过程名 Parameters输入参数 ParamTypes参数类型String Int float Date
#     ParamOutName输出参数名 ParamOutType输出参数类型
    def Common_Sql_Proc(self,inputProName, inputParameters, inputParamTypes, inputParamOutName, inputParamOutType, inputTrn):
        try:    
            temDs = DBManager_Self()
            self.attConn_a = temDs.getConnection()        
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.acquire()
            if inputTrn.attINF_TYPE == "1":
                self.attRs_out = self.attConn_a.ParamExecuteQuery(inputProName,inputParameters,inputParamTypes,inputParamOutName,inputParamOutType)
            else:
                self.attRs_out = self.attConn_a.ParamExecuteQuery(inputProName,inputParameters,inputParamTypes,inputParamOutName,inputParamOutType,inputTrn.attINF_EN_SQL)
            self.attColumnNames = self.attConn_a.attColumnNames
        except Exception as e:
            self.attSqlException = "数据库操作出错请查看程序错误日志文件:" + inputProName + " "+ repr(e)        
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputProName+"==>"+repr(e)
                self.debug_in(self,inputProName+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputProName+"==>"+repr(e)
                self.debug_in(inputProName+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            temDs.returnConnection(self.attConn_a.attConnection)
            self.Close_Conn()
            if str(self.attConn_a.attConnection).find("sqlite3.Connection") != -1:
                Com_Para.Dblock1.release()
        return self.attRs_out
    
    def Close_Conn(self):
        if not self.attConn_a.attConnection is None:
            pass

数据库管理类(com.zxy.db_Self.DBManager_Self.py

python 复制代码
#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''

from com.zxy.common import Com_Para
from com.zxy.common.DbConfigSelf import DbConfigSelf
from com.zxy.db_Self.ConnectionPool_Self import ConnectionPool_Self
from com.zxy.z_debug import z_debug

#监测数据采集物联网应用--数据库管理
class DBManager_Self(z_debug):
   
    attConn = None
    attConnectionPool = None

    def __init__(self):
        if Com_Para.url == "":
            DbConfigSelf.GetDbConfigSelfNew()
        self.attConnectionPool = ConnectionPool_Self(Com_Para.driverClassName,Com_Para.url,Com_Para.username,Com_Para.password)
        try:
            self.attConnectionPool.createPool()
        except Exception as e:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
        finally:
            pass
    
    def getConnection(self):
        try:
            self.attConn = self.attConnectionPool.getConnection()
        except Exception as e:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
        finally:
            return self.attConn

    def returnConnection(self,inputConn):
        return self.attConnectionPool.returnConnection(inputConn)
    
    @staticmethod
    def closeConnectionPoolTimeOut(self):
        try:
            self.attConnectionPool.closeConnectionPoolTimeOut()
        except Exception as e:
            if str(type(self)) == "<class 'type'>":
                self.debug_in(self,repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                self.debug_in(repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
        finally:
            Pass

数据库连接池类(com.zxy.db_Self.PooledConnection_Self.py

python 复制代码
#! python3
# -*- coding: utf-8 -
'''
Created on 2023年08月28日
@author: zxyong 13738196011
'''

from urllib.parse import unquote

from com.zxy.adminlog.UsAdmin_Log import UsAdmin_Log
from com.zxy.common import Com_Para
from com.zxy.common.Com_Fun import Com_Fun
from com.zxy.z_debug import z_debug

#监测数据采集物联网应用--数据库连接池
class PooledConnection_Self(z_debug):
    attUpdtime = 0
    attB_nocursor = True
    attConnection = None
    attBusy = False
    attColumnNames = []
    attlastrowid = -1
    
    def __init__(self, inputConn):
        self.attB_nocursor = True
        self.attConnection = inputConn
        self.attUpdtime = Com_Fun.getTimeLong()

    def executeQueryNoCommit(self, inputSql):
        temCursor = None
        temValues = None
        try:
            self.attUpdtime = Com_Fun.getTimeLong()        
            # 建立cursor
            temCursor = self.attConnection.cursor()
            # 执行sql select
            temCursor.execute(inputSql)
            # 利用featchall获取数据
            temValues = temCursor.fetchall()
            self.attColumnNames = temCursor.description
            self.attConnection.commit()
        except Exception as e:
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputSql+"==>"+repr(e)
                self.debug_in(self,inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputSql+"==>"+repr(e)
                self.debug_in(inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            if not temCursor is None:
                temCursor.close()
        return temValues
    
    def executeQuery(self, inputSql):
        temCursor = None
        temValues = None
        try:
            self.attUpdtime = Com_Fun.getTimeLong()        
            # 建立cursor
            temCursor = self.attConnection.cursor()
            # 执行sql select
            temCursor.execute(inputSql)
            # 利用featchall获取数据
            temValues = temCursor.fetchall()
            self.attColumnNames = temCursor.description
            if inputSql.lower().find("insert into") == 0 or inputSql.lower().find("update ") == 0 or inputSql.lower().find("delete ") == 0:
                self.attConnection.commit()
        except Exception as e:
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputSql+"==>"+repr(e)
                self.debug_in(self,inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputSql+"==>"+repr(e)
                self.debug_in(inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            if not temCursor is None:
                temCursor.close()
        return temValues
    
    def executeUpdateRowID(self, inputSql):
        temResult = -1
        temCursor = None
        try:
            self.attUpdtime = Com_Fun.getTimeLong()        
            # 建立cursor
            temCursor = self.attConnection.cursor()
            # 执行sql insert update delete t
            temCursor.execute(inputSql)
            temResult = temCursor.lastrowid
            self.attConnection.commit()
        except Exception as e:
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputSql+"==>"+repr(e)
                self.debug_in(self,inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputSql+"==>"+repr(e)
                self.debug_in(inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            if not temCursor:
                temCursor.close()
        return temResult
    
    def executeUpdate(self, inputSql):
        temResult = -1
        temCursor = None
        try:
            self.attUpdtime = Com_Fun.getTimeLong()        
            # 建立cursor
            temCursor = self.attConnection.cursor()
            # 执行sql insert update delete t
            temCursor.execute(inputSql)
            temResult = temCursor.rowcount
            self.attConnection.commit()
        except Exception as e:
            temLog = ""
            if str(type(self)) == "<class 'type'>":
                temLog = self.debug_info(self)+inputSql+"==>"+repr(e)
                self.debug_in(self,inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            else:
                temLog = self.debug_info()+inputSql+"==>"+repr(e)
                self.debug_in(inputSql+"==>"+repr(e)+"=>"+str(e.__traceback__.tb_lineno))#打印异常信息
            uL = UsAdmin_Log(Com_Para.ApplicationPath, temLog)
            uL.WriteLog()
        finally:
            if not temCursor:
                temCursor.close()
        return temResult
    
    def ParamExecuteQuery(self,inputProName, inputParameters, inputParamTypes, inputParamOutName, inputParamOutType, inputStrSql):
        self.attUpdtime = Com_Fun.getTimeLong()
        temValues = None
        # 建立cursor
        temCursor = self.attConnection.cursor()
        if len(inputParameters) == len(inputParamTypes) and len(inputParamOutName) == len(inputParamOutType):
            i = 0
            for temParamTypes in inputParamTypes:
                if temParamTypes == "LIST":
                    j = 0
                    temStr_V = ""
                    for iIn in temParamTypes.split(","):
                        if j != 0:
                            temStr_V += ","
                        temStr_V += "?"
                        j += 1                    
                    inputStrSql = inputStrSql.replace("@\\?",temStr_V,1)
                
                if temParamTypes.upper() == "STRING":
                    inputParameters[i] = inputParameters[i]#Com_Fun.py_urldecode(inputParameters[i])#unquote(inputParameters[i],Com_Para.U_CODE)
                    pass
                elif temParamTypes.upper() == "INT":
                    inputParameters[i] = int(inputParameters[i])
                    pass
                elif temParamTypes.upper() == "FLOAT":
                    inputParameters[i] = float(inputParameters[i])
                    pass
                elif temParamTypes.upper() == "DATE":
                    inputParameters[i] = unquote(inputParameters[i].replace("+"," "),Com_Para.U_CODE)
                    pass
                elif temParamTypes.upper() == "LIST":
                    pass
                elif temParamTypes.upper() == "LIKESTRING":
                    inputParameters[i] = unquote(inputParameters[i],Com_Para.U_CODE)
                    pass
                i += 1
                
            if inputStrSql.upper().strip().find("INSERT INTO") == 0 or inputStrSql.upper().strip().find("UPDATE") == 0:
                # 执行sql select
                iCount = temCursor.execute(inputStrSql,inputParameters)
                self.attlastrowid = temCursor.lastrowid
                if iCount.rowcount != -1:
                    # 执行sql insert update delete t
                    temCursor.execute("select '1' as 's_result','成功,"+str(iCount.rowcount)+"' as 'error_desc'")
                else:
                    temCursor.execute("select '0' as 's_result','失败' as 'error_desc'")
                # 利用featchall获取数据
                temValues = temCursor.fetchall()
                self.attColumnNames = temCursor.description
                self.attConnection.commit()
            elif inputStrSql.upper().strip().find("DELETE") == 0:
                if inputStrSql.upper().strip().find(";") != -1:
                    iCount = None
                    for strSqls in inputStrSql.split(";"):             
                        # 执行多个sql
                        iCount = temCursor.execute(strSqls)
                    if iCount.rowcount != -1:
                        # 执行sql insert update delete t
                        temCursor.execute("select '1' as 's_result','成功' as 'error_desc'")
                    else:
                        temCursor.execute("select '0' as 's_result','失败' as 'error_desc'")
                    # 利用featchall获取数据
                    temValues = temCursor.fetchall()
                    self.attColumnNames = temCursor.description
                    self.attConnection.commit()
                else:
                    # 执行sql select
                    iCount = temCursor.execute(inputStrSql,inputParameters)
                    if iCount.rowcount != -1:
                        # 执行sql insert update delete t
                        temCursor.execute("select '1' as 's_result','成功' as 'error_desc'")
                    else:
                        temCursor.execute("select '0' as 's_result','失败' as 'error_desc'")
                    # 利用featchall获取数据
                    temValues = temCursor.fetchall()
                    self.attColumnNames = temCursor.description
                    self.attConnection.commit()
            elif inputStrSql.upper().strip().find("SELECT") == 0:
                iCount = temCursor.execute(inputStrSql,inputParameters)
                # 利用featchall获取数据
                temValues = temCursor.fetchall()
                self.attColumnNames = temCursor.description
                self.attConnection.commit()
        return temValues
  1. 监测数据采集物联网应用开发步骤(5.3)
相关推荐
乾元8 分钟前
LLM 自动生成安全基线与等保合规初稿——把“网络工程事实”转译为“可审计的制度语言”
运维·网络·人工智能·python·安全·架构
全栈陈序员10 分钟前
【Python】基础语法入门(二十四)——文件与目录操作进阶:安全、高效地处理本地数据
开发语言·人工智能·python·学习
是有头发的程序猿12 分钟前
Python爬虫实战:面向对象编程构建高可维护的1688商品数据采集系统
开发语言·爬虫·python
摸鱼仙人~16 分钟前
企业级 RAG 问答系统开发上线流程分析
后端·python·rag·检索
serve the people22 分钟前
tensorflow tf.nn.softmax 核心解析
人工智能·python·tensorflow
癫狂的兔子29 分钟前
【BUG】【Python】eval()报错
python·bug
啃火龙果的兔子30 分钟前
java语言基础
java·开发语言·python
masterqwer30 分钟前
day42打卡
python
不会飞的鲨鱼32 分钟前
抖音验证码滑动轨迹原理(很难审核通过)
javascript·python
我命由我1234533 分钟前
Python 开发问题:No Python interpreter configured for the project
开发语言·后端·python·学习·pycharm·学习方法·python3.11