def writeProtocolToDatabase(protocol, idprotocol=None): """ Пишет протокол в базу данных @protocol - объект протокола @idprotocol - если задано, то пишет на этот айди. Если таковой айди имеется в базе данных, то проиcходит перезапись. """ db=dbdesc() cursor=db.cursor() pickled=pickle.dumps(protocol) if (idprotocol==None): #вкатываем протокол в базу данных через pickle sql = """INSERT INTO protocols(ProductName, TestName, Pickle) VALUES (%(model)s, %(testname)s , %(pickl)s) """ #print (sql) # исполняем SQL-запрос try: cursor.execute(sql, {'model':protocol.model, 'testname':protocol.typeOfTest, 'pickl': pickled}) #cursor.execute(sql, {'model':"проверка", 'testname':protocol.typeOfTest, 'pickl': pickled}) db.commit() except: # Rollback in case there is any error db.rollback() db.close() return 1 else: #если айди задан #то сперва надо удалить такой айди в базе, если он, правда, есть. Если такого нет, то надо выкинуть ошибку наверное (?) sql = "DELETE FROM protocols WHERE ID='"+str(idprotocol)+"'" try: cursor.execute(sql) db.commit() except: db.rollback() db.close() return 1 #ключевой момент - если не найдено такого айди, то вернуть один и ничего не делать #вкатываем протокол в базу данных через pickle sql = """INSERT INTO protocols(ID, ProductName, TestName, Pickle) VALUES (%(ID)s, %(model)s, %(testname)s , %(pickl)s) """ #print (sql) # исполняем SQL-запрос try: cursor.execute(sql, {'ID':idprotocol,'model':protocol.model, 'testname':protocol.typeOfTest, 'pickl': pickled}) db.commit() except: # Rollback in case there is any error db.rollback() db.close() return 1 # disconnect from server db.close() return 0
def get_list_of_protocols(filters=None): """ возвращает список протоколов, получаемых из базы данных, или же словарь, где id в базе данных - объект filters - строка с фильтрами. Может быть None """ db = dbdesc() cursor = db.cursor() if filters == None: sql = "Select * from protocols;" else: sql = "Select * from protocols where {0} ;".format(filters) cursor.execute(sql) # может вытряжнуть какое-нибудь исключение ## Dump the results to a string rows = cursor.fetchall() ## Get the results res = dict() for each in rows: ## The result is also in a tuple res[each[0]] = pickle.loads(each[3]) return res
def getProtocolFromDatabase (id): """ Получить протокол из базы данных @id: айди в базе данных """ db=dbdesc() cursor = db.cursor() sql= "Select * from protocols where id = {0} ;".format(id) cursor.execute (sql) #может вытряжнуть какое-нибудь исключение ## Dump the results to a string rows = cursor.fetchall() if (len(rows)==0): #если такого нет return None, "Error, no such protocol in database" ## Get the results result=rows[0] return pickle.loads(rows[0][3]), rows[0][1], rows[0][2]
def getResultFromDatabase(id): """ Получить результат из базы данных @id: айди в базе данных """ db=dbdesc() cursor = db.cursor() sql= "Select * from results where id = {0} ;".format(id) cursor.execute (sql) #может вытряжнуть какое-нибудь исключение ## Dump the results to a string rows = cursor.fetchall() if (len(rows)==0): #если такого нет return None, "Ошибка, нет такого результата в базе данных" ## Get the results result=rows[0] return pickle.loads(rows[0][8]), rows[0][1], rows[0][2], rows[0][3], rows[0][4], rows[0][5], rows[0][6], rows[0][7], rows[0][11], rows[0][12]
def getProtocolFromDatabaseParams (ProductName, TestName): """ Получить протокол из базы данных @ProductName - имя продукта @TestName - имя теста """ db=dbdesc() cursor = db.cursor() sql= "Select * from protocols where ProductName = '{0}' and TestName = '{1}';".format(ProductName, TestName) cursor.execute (sql) #может вытряжнуть какое-нибудь исключение ## Dump the results to a string rows = cursor.fetchall() if (len(rows)==0): #если такого нет return None, "Error, no such protocol in database" ## Get the results result=rows[0] return pickle.loads(rows[0][3]), rows[0][1], rows[0][2]
def writeResultToDatabase(result, idresult=None): """ Записать результат в базу данных @result - объект результата @idresult - если задано, то пишет на этот айди. Если таковой айди имеется в базе данных, то проиcходит обязательная перезапись """ if result==None: return 1 db=dbdesc() cursor=db.cursor() pickled=pickle.dumps(result) # # `ID` int(11) NOT NULL AUTO_INCREMENT, # `ProductName` text, # `TestName` text, # `Operator` text, # `Date` datetime DEFAULT NULL, # `SerialNumber` text, # `BatchNumber` text, # `TypeOfTest` text, # `Pickle` blob, # `XML` text, # `Text` text, # `resultscol` varchar(45) DEFAULT NULL, # # model=str() # typeOfTest=str() # operator=str() # testDateTime=str() # testTime=str() # numOfProduct=int() # numOfBatch=int() # hasPassedTest=bool() #1 - прошёл, 0 - не прошйл. Результаты испытаний # proceduresResults=dict() #номер испытания - resultsOfProcedure if (idresult==None): #вкатываем протокол в базу данных через pickle sql = """INSERT INTO results(ProductName, TestName, Operator, Date, SerialNumber, BatchNumber, Pickle, hasPassedTest) VALUES (%(model)s, %(testname)s , %(Operator)s, %(Date)s, %(SerialNumber)s, %(BatchNumber)s, %(pickl)s, %(hasPassedTest)s ) """ #print (sql) # исполняем SQL-запрос try: cursor.execute(sql, {'model':result.model, 'testname':result.typeOfTest, 'Operator':result.operator, 'Date':result.testDateTime, 'SerialNumber':result.numOfProduct, 'BatchNumber':result.numOfBatch, 'pickl':pickled, 'hasPassedTest':result.hasPassedTest}) db.commit() except: # Rollback in case there is any error db.rollback() db.close() return 2 else: #если айди задан #то сперва надо удалить такой айди в базе, если он, правда, есть. Если такого нет, то надо выкинуть ошибку наверное (?) sql = "DELETE FROM results WHERE ID='"+str(idresult)+"'" try: cursor.execute(sql) db.commit() except: db.rollback() db.close() return 3 #ключевой момент - если не найдено такого айди, то вернуть один и ничего не делать #вкатываем протокол в базу данных через pickle sql = """INSERT INTO results(ID, ProductName, TestName, Operator, Date, SerialNumber, BatchNumber, Pickle, hasPassedTest) VALUES (%(ID)s, %(model)s, %(testname)s , %(Operator)s, %(Date)s, %(SerialNumber)s, %(BatchNumber)s, %(pickl)s, %(hasPassedTest)s ) """ #print (sql) # исполняем SQL-запрос #try: cursor.execute(sql, {'ID':str(idresult), 'model':result.model, 'testname':result.typeOfTest, 'Operator':result.operator, 'Date':result.testDateTime, 'SerialNumber':result.numOfProduct, 'BatchNumber':result.numOfBatch, 'pickl':pickled, 'hasPassedTest':result.hasPassedTest}) db.commit() #except: # Rollback in case there is any error # db.rollback() # db.close() # return 4 # disconnect from server db.close() return 0