def userStatus(status): update = "UPDATE user SET user_status = '%s' WHERE user_name = '%s'" % (skype.CurrentUserStatus,skype.CurrentUser.Handle) conn = Connect(host='auditim.tk', user='******', passwd='$passW0rD') curs = conn.cursor() curs.execute('use db_auditim') curs.execute(update) conn.commit()
def userStatus(status): update = "UPDATE user SET user_status = '%s' WHERE user_name = '%s'" % ( skype.CurrentUserStatus, skype.CurrentUser.Handle) conn = Connect(host='auditim.tk', user='******', passwd='$passW0rD') curs = conn.cursor() curs.execute('use db_auditim') curs.execute(update) conn.commit()
def handleMessages(msg,status): print "handleMessages" if status == 'SENT' or status == 'READ': conn = Connect(host='auditim.tk', user='******', passwd='$passW0rD') curs = conn.cursor() curs.execute('use db_auditim') curs.execute('insert into history (user_name, chat_id, chat_name, from_name_user, from_name_display, message_status, message_type, message_body, chat_date, chat_timestamp) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', (skype.CurrentUser.Handle, msg.Id, msg.ChatName, msg.FromHandle, msg.FromDisplayName, status, msg.Type, msg.Body, msg.Datetime, msg.Timestamp)) conn.commit()
def handleMessages(msg, status): print "handleMessages" if status == 'SENT' or status == 'READ': conn = Connect(host='auditim.tk', user='******', passwd='$passW0rD') curs = conn.cursor() curs.execute('use db_auditim') curs.execute( 'insert into history (user_name, chat_id, chat_name, from_name_user, from_name_display, message_status, message_type, message_body, chat_date, chat_timestamp) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', (skype.CurrentUser.Handle, msg.Id, msg.ChatName, msg.FromHandle, msg.FromDisplayName, status, msg.Type, msg.Body, msg.Datetime, msg.Timestamp)) conn.commit()
class Connect_MySQL: ## Inicializa o banco de dados # @param host Servidor do banco de dados # @param user Usuario do banco de dados # @param passwd Senha do banco de dados def __init__(self, host, user, passwd): self.host = host self.user = user self.passwd = passwd self.conecta() def conecta(self): self.conn = Connect(self.host, self.user, self.passwd, charset='utf8', use_unicode=True) self.curs = self.conn.cursor() self.curs.execute('CREATE DATABASE IF NOT EXISTS controledeacesso') self.curs.execute('USE controledeacesso') self.conn.commit() ## Deleta todas as tabelas se existirem def dropar_Tabelas(self): self.curs.execute('DROP TABLE IF EXISTS funcionarios') self.curs.execute('DROP TABLE IF EXISTS horarios') self.curs.execute('DROP TABLE IF EXISTS pontos') self.curs.execute('DROP TABLE IF EXISTS log_porta') self.curs.execute('DROP TABLE IF EXISTS configuracoes') self.conn.commit() ## Cria as tabelas do programa na instalação def criar_Tabelas(self): self.curs.execute( "CREATE TABLE IF NOT EXISTS funcionarios (id_funcionario INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100), matricula VARCHAR(40) NOT NULL, rfid VARCHAR(20), ativo BOOLEAN NOT NULL)" ) self.curs.execute( "CREATE TABLE IF NOT EXISTS horarios (id_horario INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_funcionario INT NOT NULL, dia_da_semana INT NOT NULL, hora_inicial TIME NOT NULL, hora_final TIME NOT NULL)" ) self.curs.execute( "CREATE TABLE IF Not EXISTS pontos (id_ponto INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_funcionario INT NOT NULL, id_horario INT NOT NULL, horario_entrada DATETIME NOT NULL, horario_saida DATETIME, presenca INT)" ) self.curs.execute( "CREATE TABLE IF NOT EXISTS log_porta (id_log INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_funcionario INT NOT NULL, horario_entrada DATETIME NOT NULL)" ) self.curs.execute( "CREATE TABLE IF NOT EXISTS configuracoes (id_config INT NOT NULL AUTO_INCREMENT PRIMARY KEY, tipo VARCHAR(100) NOT NULL, dado VARCHAR(100) NOT NULL)" ) self.conn.commit() ## Cria as configurações do programa # @param config Nome da configuração # @param dado Dado que vai ser inserido def criar_Configuracoes(self, config, dado): sql = "INSERT INTO configuracoes (tipo,dado) VALUES (%s,%s)" self.curs.execute(sql, (config, dado)) self.conn.commit()
class Connect_MySQL: ## Inicializa o banco de dados # @param host Servidor do banco de dados # @param user Usuario do banco de dados # @param passwd Senha do banco de dados def __init__(self, host, user, passwd): self.host = host self.user = user self.passwd = passwd self.conecta() def conecta(self): self.conn = Connect(self.host, self.user, self.passwd, charset="utf8", use_unicode=True) self.curs = self.conn.cursor() self.curs.execute("CREATE DATABASE IF NOT EXISTS controledeacesso") self.curs.execute("USE controledeacesso") self.conn.commit() ## Deleta todas as tabelas se existirem def dropar_Tabelas(self): self.curs.execute("DROP TABLE IF EXISTS funcionarios") self.curs.execute("DROP TABLE IF EXISTS horarios") self.curs.execute("DROP TABLE IF EXISTS pontos") self.curs.execute("DROP TABLE IF EXISTS log_porta") self.curs.execute("DROP TABLE IF EXISTS configuracoes") self.conn.commit() ## Cria as tabelas do programa na instalação def criar_Tabelas(self): self.curs.execute( "CREATE TABLE IF NOT EXISTS funcionarios (id_funcionario INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100), matricula VARCHAR(40) NOT NULL, rfid VARCHAR(20), ativo BOOLEAN NOT NULL)" ) self.curs.execute( "CREATE TABLE IF NOT EXISTS horarios (id_horario INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_funcionario INT NOT NULL, dia_da_semana INT NOT NULL, hora_inicial TIME NOT NULL, hora_final TIME NOT NULL)" ) self.curs.execute( "CREATE TABLE IF Not EXISTS pontos (id_ponto INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_funcionario INT NOT NULL, id_horario INT NOT NULL, horario_entrada DATETIME NOT NULL, horario_saida DATETIME, presenca INT)" ) self.curs.execute( "CREATE TABLE IF NOT EXISTS log_porta (id_log INT NOT NULL AUTO_INCREMENT PRIMARY KEY, id_funcionario INT NOT NULL, horario_entrada DATETIME NOT NULL)" ) self.curs.execute( "CREATE TABLE IF NOT EXISTS configuracoes (id_config INT NOT NULL AUTO_INCREMENT PRIMARY KEY, tipo VARCHAR(100) NOT NULL, dado VARCHAR(100) NOT NULL)" ) self.conn.commit() ## Cria as configurações do programa # @param config Nome da configuração # @param dado Dado que vai ser inserido def criar_Configuracoes(self, config, dado): sql = "INSERT INTO configuracoes (tipo,dado) VALUES (%s,%s)" self.curs.execute(sql, (config, dado)) self.conn.commit()
from MySQLdb import Connect conn = Connect(host='localhost', user='******', passwd='python') curs = conn.cursor() try: curs.execute('drop database testpeopledb') except: pass # did not exist curs.execute('create database testpeopledb') curs.execute('use testpeopledb') curs.execute('create table people (name char(30), job char(10), pay int(4))') curs.execute('insert people values (%s, %s, %s)', ('Bob', 'dev', 50000)) curs.execute('insert people values (%s, %s, %s)', ('Sue', 'dev', 60000)) curs.execute('select * from people') for row in curs.fetchall(): print row curs.execute('select * from people') colnames = [desc[0] for desc in curs.description] while True: print '-' * 30 row = curs.fetchone() if not row: break for (name, value) in zip(colnames, row): print '%s => %s' % (name, value) conn.commit() # save inserted records
def build_db(): conn = Connect('localhost', 'root') c = conn.cursor() c.execute('CREATE DATABASE IF NOT EXISTS LINdb_Psy') c.execute('USE LINdb_Psy') c.execute('CREATE TABLE Genome (Genome_ID int NOT NULL AUTO_INCREMENT,' 'Interest_ID int NOT NULL,' 'Submission_ID int NOT NULL,' 'FilePath text NOT NULL,' 'GenomeName text NOT NULL,' 'PRIMARY KEY (Genome_ID))') c.execute('CREATE TABLE Interest (Interest_ID int NOT NULL AUTO_INCREMENT,' 'InterestName varchar(255) NOT NULL,' 'Attribute_IDs text NOT NULL,' 'PRIMARY KEY (Interest_ID))') c.execute('CREATE TABLE Attribute (Attribute_ID int NOT NULL AUTO_INCREMENT,' 'AttributeName varchar(255) NOT NULL,' 'PRIMARY KEY (Attribute_ID))') c.execute('CREATE TABLE LIN (LIN_ID int NOT NULL AUTO_INCREMENT,' 'Genome_ID int NOT NULL,' 'Scheme_ID int NOT NULL,' 'SubjectGenome int NOT NULL,' 'ANI DOUBLE NOT NULL,' 'LIN text NOT NULL,' 'PRIMARY KEY (LIN_ID))') c.execute('CREATE TABLE Scheme (Scheme_ID int NOT NULL AUTO_INCREMENT,' 'Cutoff text(255) NOT NULL,' 'LabelNum int NOT NULL,' 'PRIMARY KEY (Scheme_ID))') c.execute('CREATE TABLE Submission (Submission_ID int NOT NULL AUTO_INCREMENT,' 'User_ID int NOT NULL,' 'Time text NOT NULL,' 'PRIMARY KEY (Submission_ID))') c.execute( 'CREATE TABLE User (User_ID int NOT NULL AUTO_INCREMENT,FirstName varchar(255) NOT NULL,LastName varchar(255) ' 'NOT NULL,Institute varchar(255) NOT NULL,RegistrationDate text NOT NULL,Username varchar(255) NOT NULL,' 'Password text NOT NULL,Email text NOT NULL,PRIMARY KEY (User_ID))') c.execute( "CREATE TABLE AttributeValue (AttributeValue_ID int NOT NULL AUTO_INCREMENT,Genome_ID int NOT NULL," "Interest_ID int NOT NULL, Attribute_ID int not null,AttributeValue text not null,User_ID int not null," "Private boolean not null,PRIMARY KEY (AttributeValue_ID))") c.execute("CREATE TABLE Genome_to_Attribute (Genome_to_Attribute_ID int NOT NULL AUTO_INCREMENT, " "Genome_ID INT NOT NULL, Genus text, Species text,Subspecies__Pathovar text, Strain text, Type_strain text," " GPS_Coordinates text, Date_of_isolation text," "NCBI_Accession text, Country text, Link_to_peer_reviewed_paper text,Host_of_isolation__Environmental_source text," "Disease text, Infectious_disease_name text," "Host text, PRIMARY KEY (Genome_to_Attribute_ID))") c.execute( "CREATE TABLE Description (Description_ID int not null auto_increment, LIN_group text NOT NULL ," "Description_Item_ID int not null, DescriptionValue text not null, User_ID INT NOT NULL , PRIMARY KEY (Description_ID))") c.execute( "CREATE TABLE Description_Items (Description_Item_ID int not null auto_increment, Description_Item_Name text " "not null, PRIMARY KEY (Description_Item_ID))") c.execute( "CREATE TABLE LIN_to_Description (LIN_to_Description_ID int NOT NULL AUTO_INCREMENT, LIN_group text NOT NULL, " "Genus text, Species text, Nickname text, Comment text, URL text, PRIMARY KEY(LIN_to_Description_ID))") ### INITIALIZATION # c.execute("insert into User (LastName, FirstName, Institute, RegistrationDate, Username, Password, Email) values # ('Tian', 'Long', 'Virginia Tech', '2015-5-17', 'longtian', '123456', '*****@*****.**')") # Attributes # General entries c.execute("INSERT INTO Attribute (AttributeName) values ('Genus')") c.execute("INSERT INTO Attribute (AttributeName) values ('Species')") c.execute("INSERT INTO Attribute (AttributeName) values ('Subspecies/Pathovar')") c.execute("INSERT INTO Attribute (AttributeName) values ('Strain')") c.execute("INSERT INTO Attribute (AttributeName) values ('Type strain')") c.execute("INSERT INTO Attribute (AttributeName) values ('GPS Coordinates')") c.execute("INSERT INTO Attribute (AttributeName) values ('Date of isolation')") c.execute("INSERT INTO Attribute (AttributeName) values ('NCBI Accession')") c.execute("INSERT INTO Attribute (AttributeName) values ('Country')") c.execute("INSERT INTO Attribute (AttributeName) values ('Link to peer-reviewed paper')") # For Plant pathogen c.execute("INSERT INTO Attribute (AttributeName) values ('Host of isolation/Environmental source')") c.execute("INSERT INTO Attribute (AttributeName) VALUES ('Disease')") # For Virus c.execute("INSERT INTO Attribute (AttributeName) values ('Infectious disease name')") c.execute("INSERT INTO Attribute (AttributeName) values ('Host')") # Interest c.execute( "INSERT INTO Interest (InterestName, Attribute_IDs) values ('Plant pathogen','1,2,3,4,5,6,7,8,9,10,11,12')") c.execute( "INSERT INTO Interest (InterestName, Attribute_IDs) values ('Human & Animal viruses','1,2,4,5,6,7,9,10,13,14')") # Scheme c.execute("INSERT INTO Scheme (Cutoff, LabelNum) values ('70,75,80,85,90,95,96,97,98,99.99999', 10)") c.execute( "INSERT INTO Scheme (Cutoff, LabelNum) values ('60,70,80,85,90,95,98,99,99.5,99.6,99.7,99.8,99.9,99.91,99.92," "99.93,99.94,99.95,99.96,99.97,99.98,99.99,99.999,99.9999', 24)") c.execute( "INSERT INTO Scheme (Cutoff, LabelNum) values ('60,70,75,80,85,90,95,98,98.5,99,99.25,99.5,99.75,99.9,99.925," "99.95,99.975,99.99,99.999,99.9999', 20)") # Description Items c.execute("INSERT INTO Description_Items (Description_Item_Name) values ('Genus')") c.execute("INSERT INTO Description_Items (Description_Item_Name) values ('Species')") c.execute("INSERT INTO Description_Items (Description_Item_Name) values ('Nickname')") c.execute("INSERT INTO Description_Items (Description_Item_Name) values ('Comment')") c.execute("INSERT INTO Description_Items (Description_Item_Name) values ('URL')") # # Enter one genome to start # Start with Genome of DC3000, which is GCA_000007805.1.fasta c.execute("insert into User (LastName, FirstName, Institute, RegistrationDate, Username, Password, Email) values " "('Tian', 'Long', 'Virginia Tech', '2016-10-21', '*****@*****.**', '123456', '*****@*****.**')") c.execute("INSERT INTO Submission (User_ID, Time) VALUES (1,'2016-11-02')") c.execute( "INSERT INTO Genome (Interest_ID, Submission_ID, FilePath, GenomeName) VALUES (1, 1, '/home/linproject/Workspace/Psy_166/init/GCA_000007805.fasta', 'GCA_000007805')") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 1, 'Pseudomonas', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 2, 'syringae', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 3, 'pv. tomato', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 4, 'DC3000', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 5, 'No', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 6, '49.5,-2.5', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 7, 'NA', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 8, 'AE016853', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 9, 'United Kingdom', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 10, '10.1073/pnas.1731982100', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 11, 'Solanum lycopersicum', 1, False)") c.execute( "INSERT INTO AttributeValue (Genome_ID, Interest_ID, Attribute_ID, AttributeValue, User_ID, Private) VALUES (1, 1, 12, 'Plant rot, Speck disease', 1, False)") c.execute("" "INSERT INTO LIN (Genome_ID, Scheme_ID, SubjectGenome, ANI, LIN) VALUES (1, 3, 1, 1, '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')") conn.commit()
def extract(): print("{} Descriptor Extractor: [{}]".format(memory_usage_psutil(), color(FEATURE_DETECTOR_ALG.upper(), fontcolor=FONT_COLOR, bold=True))) # Pega lista de imagens images_list = make_image_list(DATASET_PATH) print("{} Images: [{}]".format(memory_usage_psutil(), color(len(images_list), fontcolor=FONT_COLOR, bold=True))) # Connect to DATABASE print("{} Connecting to the MySQL database...".format(memory_usage_psutil()), end=' ') try: DB_CONN = Connect(DATABASE_SETTINGS["host"], DATABASE_SETTINGS["user"], DATABASE_SETTINGS["password"], DATABASE_SETTINGS["database"]) DB_CURSOR = DB_CONN.cursor() except Exception as e: raise e cprint("OK\n", fontcolor=FONT_COLOR, bold=True) # Tenta apagar tabela antiga de imagens print("{} Dropping the existing image table...".format(memory_usage_psutil()), end=' ') try: DB_CURSOR.execute("DROP TABLE {};".format(DATABASE_SETTINGS["table"])) except Exception as e: pass cprint("OK\n", fontcolor=FONT_COLOR, bold=True) print("{} Creating image table...".format(memory_usage_psutil()), end=' ') try: DB_CURSOR.execute(''' CREATE TABLE {} ( _id INT PRIMARY KEY, _path VARCHAR(255) NOT NULL UNIQUE, _descriptors JSON );'''.format(DATABASE_SETTINGS["table"])) except Exception as e: raise e cprint("OK\n", fontcolor=FONT_COLOR, bold=True) # Instancia classe de extração de descritores des_extract = DescriptorExtractor() print("{} Extracting Descriptors".format(memory_usage_psutil())) for i in tqdm(iterable=range(0, len(images_list)), ncols=90, unit='images'): # Extract image descriptors des = des_extract.extract(img_name=images_list[i], feature_detector_alg=FEATURE_DETECTOR_ALG) # Insert a img to images collection if des: if FEATURE_DETECTOR_ALG in BINARY_FEATURE_DETECTOR_ALG_LIST: try: DB_CURSOR.execute(''' INSERT INTO {} VALUES ({}, '{}', '{}') ; '''.format( DATABASE_SETTINGS["table"], # Nome da tabela int(images_list[i].split('/')[-1]), #ID da imagem em INT images_list[i], # Caminho até a imagem dumps([to_bit_string(elem) for elem in des]) # bit-string-descriptors em JSON ) ) except Exception as e: raise e elif FEATURE_DETECTOR_ALG in NUMERICAL_FEATURE_DETECTOR_ALG_LIST: try: DB_CURSOR.execute(''' INSERT INTO {} VALUES ({}, '{}', '{}') ; '''.format( DATABASE_SETTINGS["table"], # Nome da tabela i, #int(images_list[i].split('/')[-1]), #ID da imagem em INT images_list[i], # Caminho até a imagem dumps([elem for elem in des]) # array-descriptors em JSON ) ) except Exception as e: raise e else: raise Exception("Algoritmo não foi adicionado à lista de algoritmos válidos!") des = None del des print("{} Descriptors: [{}]".format(memory_usage_psutil(), color(des_extract.size, fontcolor=FONT_COLOR, bold=True))) print("{} Descriptors per image: [{}]".format(memory_usage_psutil(), color(des_extract.size/len(images_list), fontcolor=FONT_COLOR, bold=True))) images_list = None del images_list, des_extract # Confirma alterações no BD print("{} Writing data in the database...".format(memory_usage_psutil()), end=' ') try: DB_CONN.commit() except Exception as e: raise e cprint("OK\n", fontcolor=FONT_COLOR, bold=True) # Fecha conexão print("{} Closing the connection to the database...".format(memory_usage_psutil()), end=' ') try: DB_CONN.close() except Exception as e: raise e cprint("OK\n", fontcolor=FONT_COLOR, bold=True)
class Model: def __init__(self): self._conn = None self._cursor = None def connect(self, host, user, password, database): ''' Método para conectar-se à Base de Dados Args: host : str Nome do host da Base de Dados user : str Usuário da Base de Dados password : str Senha da Base de Dados database : str Nome do Database a ser utilizado ''' try: self._conn = Connect(host, user, password, database) self._cursor = self._conn.cursor() except Exception as e: raise e else: print("Connecting to '{}' database...".format(database)) def close(self): ''' Método para fechar a conexão com a Base de Dados ''' try: self._conn.close() except Exception as e: raise e else: print("Closing connection...") def drop_table(self, table): ''' Método para deletar uma tabela da Base de Dados Args: table : str Nome da tabela da Base de Dados ''' try: self._cursor.execute(f"DROP TABLE {table};") except: pass else: print("Dropping '{}' table...".format(table)) def commit(self): ''' Método para escrever os dados na Base de Dados ''' try: self._conn.commit() except Exception as e: raise e else: pass def select(self, columns=[], tables=[], value=None): ''' Método para ler dados da Base de Dados Args: columns : list Lista de colunas a serem selecionadas tables : list Lista de tabelas value : str Valor a ser usado com a cláusula WHERE Returns n_rows : int Quantidade de linhas retornadas ''' columns = [columns] if not isinstance(columns, list) else columns tables = [tables] if not isinstance(tables, list) else tables try: n_rows = self._cursor.execute( '''SELECT {} FROM {} WHERE {}={};'''.format( ', '.join(map(lambda item: str(item), columns)), ', '.join(map(lambda item: str(item), tables)), columns[1], self._add_aspas(value))) except Exception as e: raise e else: return n_rows def select_all(self): ''' Método para ler todos os dados da Base de Dados Returns self._cursor.fetchall() : tuple Dados lidos da Base de Dados ''' try: ret = self._cursor.execute(''' SELECT Point.pointLAT, Point.pointLNG, Point.pointStreetName, Point.pointHouseNumber, Suburb.suburbName, City.cityName, Point.pointPostalCode, State.stateUF, Country.countryName FROM Point LEFT JOIN Suburb ON Point.suburbID = Suburb.id LEFT JOIN City ON Suburb.cityID = City.id LEFT JOIN State ON City.stateID = State.id LEFT JOIN Country ON State.countryID = Country.id; ''') except: return None else: return self._cursor.fetchall() def _add_aspas(self, item): ''' Método para formatar dados: se o item é uma String, são adicionadas aspas ('') no item. Args: item : str | int | float Item a ser formatado Returns str(item) : str Item formatado ''' if isinstance(item, str): return f"'{item.lower()}'" return str(item) def insert(self, table=None, columns=[], values=[]): ''' Método para inserir dados na Base de Dados. Se a coluna for do tipo UNIQUE (countryName, stateUF, cityName, suburbName), é testado se o dado já existe na Base de Dados. Se já existir, o ID do dado é retornado; se o dado não existir, o dado é adicionado à Base de Dados e seu ID é retornado. Args: table : str Tabela onde os dados serão inseridos columns : list Lista de colunas values : list Lista de valores correspondentes às colunas Returns _id | self._cursor.lastrowid : int ID do dado adicionado ou do dado já existente ''' columns = [columns] if not isinstance(columns, list) else columns values = [values] if not isinstance(values, list) else values # Busca o ID e o valor Único da tabela na base de dados para # verificar se já existe (countryName, stateUF, cityName, suburbName) n_rows = self.select(columns=['id', columns[0]], tables=table, value=values[0]) if n_rows > 0: # Se o valor já existe, retorna o ID _data = self._cursor.fetchall()[0] # Testa se os valores são iguais _id, _value = _data if values[0] == _value: return _id # Se o valor não existe, insere ele try: ret = self._cursor.execute( '''INSERT INTO {} ({}) VALUES ({});'''.format( table, ', '.join(map(lambda item: str(item), columns)), ', '.join(map(lambda item: self._add_aspas(item), values)))) except Exception as e: raise e else: return self._cursor.lastrowid # retorna o ID da nova inserção def create_tables(self): ''' Método para criar as tabelas ''' try: self._cursor.execute(''' CREATE TABLE IF NOT EXISTS Country ( id INT NOT NULL AUTO_INCREMENT, countryName VARCHAR(50) NOT NULL UNIQUE, PRIMARY KEY (id) ); ''') self._cursor.execute(''' CREATE TABLE IF NOT EXISTS State ( id INT NOT NULL AUTO_INCREMENT, stateUF VARCHAR(5) NOT NULL UNIQUE, countryID INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (countryID) REFERENCES Country(id) ); ''') self._cursor.execute(''' CREATE TABLE IF NOT EXISTS City ( id INT NOT NULL AUTO_INCREMENT, cityName VARCHAR(50) NOT NULL UNIQUE, stateID INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (stateID) REFERENCES State(id) ); ''') self._cursor.execute(''' CREATE TABLE IF NOT EXISTS Suburb ( id INT NOT NULL AUTO_INCREMENT, suburbName VARCHAR(100) NOT NULL UNIQUE, cityID INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (cityID) REFERENCES City(id) ); ''') self._cursor.execute(''' CREATE TABLE IF NOT EXISTS Point ( id INT NOT NULL AUTO_INCREMENT, pointLAT FLOAT, pointLNG FLOAT, pointStreetName VARCHAR(100), pointHouseNumber VARCHAR(20), pointPostalCode VARCHAR(20), suburbID INT(11) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (suburbID) REFERENCES Suburb(id) ); ''') except Exception as e: raise e else: print("Creating tables...")
class Connect_Db: ## Inicializa o banco de dados # @param host Servidor do banco de dados # @param user Usuario do banco de dados # @param passwd Senha do banco de dados def __init__(self,db_dados): self.host=db_dados['host'] self.user=db_dados['user'] self.passwd=db_dados['passwd'] self.conecta() def __del__(self): self.curs.close() self.conn.close() def conecta(self): self.conn = Connect(self.host, self.user, self.passwd,charset='utf8',use_unicode=True) self.curs = self.conn.cursor() self.curs.execute('USE controledeacesso') ## Cria um funcionario na tabela funcionarios. # @param nome Nome do funcionario # @param matricula Matricula do funcionario # @param rfid RFID do funcionario. Não é obrigatoria def criar_Funcionario(self,nome,matricula,rfid=None): if not ( (isinstance(nome, str) or isinstance(nome, unicode)) and (isinstance(matricula, str) or isinstance(matricula, unicode))): return False sql="INSERT INTO funcionarios (ativo,nome,matricula,rfid) VALUES (true,%s,%s," try: if (rfid != None): sql=sql+"%s)" self.curs.execute(sql,(nome,matricula,rfid)) else: sql=sql+"NULL)" self.curs.execute(sql,(nome,matricula)) except Exception: raise self.conn.commit() return True ## Atualiza informações do usuario # @param id_funcionario Id do funcionario # @param nome Nome do funcionario # @param matricula Matricula do funcionario # @param rfid RFID do funcionario def atualizar_Funcionario(self,id_funcionario, nome=None, matricula=None, rfid=None): sql="UPDATE funcionarios SET " lista=[] if nome != None: sql=sql+"nome=%s,"; lista.append(nome) if matricula != None: sql=sql+"matricula=%s,"; lista.append(matricula) sql=sql+"rfid=%s,"; lista.append(rfid) lista.append(id_funcionario) sql=sql[0:-1] + " WHERE id_funcionario=%s" self.curs.execute(sql,tuple(lista)) self.conn.commit() ## Retorna o Id do funcionario com o nome igual o da entrada # @param nome Nome do funcionario def obter_Id_Funcionario_por_Nome(self, nome): if not (isinstance(nome, str) or isinstance(nome, unicode)): return False self.curs.execute("SELECT id_funcionario FROM funcionarios WHERE nome=%s AND ativo=true",(nome)) linhas = self.curs.fetchall() self.conn.commit() return linhas[0][0] if len(linhas)>0 else False ## Retorna o Id do funcionario com a matricula igual a da entrada # @param matricula Matricula do funcionario def obter_Id_Funcionario_por_Matricula(self, matricula): if not (isinstance(matricula, str) or isinstance(matricula, unicode)): return False self.curs.execute("SELECT id_funcionario FROM funcionarios WHERE matricula=%s AND ativo=true",(matricula)) linhas = self.curs.fetchall() self.conn.commit() return linhas[0][0] if len(linhas)>0 else False ## Retorna o Id do funcionario com a matricula igual a da entrada # @param matricula Matricula do funcionario def obter_Id_Funcionario_por_Rfid(self, rfid): if not (isinstance(rfid, str) or isinstance(rfid, unicode)): return False self.curs.execute("SELECT id_funcionario FROM funcionarios WHERE rfid=%s AND ativo=true",(rfid)) linhas = self.curs.fetchall() self.conn.commit() return linhas[0][0] if len(linhas)>0 else False ## Cria um horario para um funcionario # @param id_funcionario Id do funcionario # @param dia_da_semana Dia da semana no formato INT # @param hora_inicial Hora inicial no formato HH:MM:SS # @param hora_final Hora final no formato HH:MM:SS def criar_Horario(self,id_funcionario,dia_da_semana,hora_inicial,hora_final): if not isinstance(id_funcionario, long): return False if not isinstance(dia_da_semana, int): return False if not (isinstance(hora_inicial, str) or isinstance(hora_inicial, unicode)): return False if not (isinstance(hora_final, str) or isinstance(hora_final, unicode)): return False sql="INSERT INTO horarios (id_funcionario,dia_da_semana,hora_inicial,hora_final) VALUES (%s,%s,%s,%s)" self.curs.execute(sql,(id_funcionario,dia_da_semana,hora_inicial,hora_final)) self.conn.commit() return True ## Remove um dos horarios de um funcionario # @param id_horario Id do horario def remover_Horario(self,id_horario): self.curs.execute("DELETE FROM horarios WHERE id_horario=%s ",(id_horario)) self.conn.commit() ## Obtem as configurações do programa # @param config Nome da configuração def obter_Configuracoes(self,config): if not (isinstance(config, str) or isinstance(config, unicode)): return False self.curs.execute("SELECT dado FROM configuracoes WHERE tipo=%s",(config)) linhas = self.curs.fetchall() self.conn.commit() return linhas[0][0] if len(linhas)>0 else False ## Atualiza as configurações do programa # @param config Nome da configuração # @param dado Dado que vai ser inserido def atualizar_Configuracoes(self,config,dado): if not (isinstance(config, str) or isinstance(config, unicode)): return False if not (isinstance(dado, str) or isinstance(dado, unicode)): return False sql="UPDATE configuracoes SET dado=%s WHERE tipo=%s" self.curs.execute(sql,(dado,config)) self.conn.commit() return True ## Obtem todos os funcionarios cadastrados def obter_Funcionarios(self): self.curs.execute("SELECT id_funcionario,nome FROM funcionarios WHERE ativo=true") linhas = self.curs.fetchall() result = [] for i in range(len(linhas)): if len(linhas[i])==2: result.append({'id_funcionario':linhas[i][0],'nome':linhas[i][1]}) self.conn.commit() return result if len(result)>0 else False ## Verifica se algun dos dados ja existem def verifica_Ja_Existe(self,nome=None,matricula=None,rfid=None,id_funcionario=None): if nome: sql="SELECT count(*) FROM funcionarios WHERE nome=%s AND ativo=true" tup=(nome) if id_funcionario!=None: sql=sql+" AND id_funcionario!=%s" tup=(nome,id_funcionario) self.curs.execute(sql,tup) nome = self.curs.fetchall() nome = nome[0][0] if nome==0: nome = None else: nome = True if matricula: sql="SELECT count(*) FROM funcionarios WHERE matricula=%s AND ativo=true" tup=(matricula) if id_funcionario!=None: sql=sql+" AND id_funcionario!=%s" tup=(matricula,id_funcionario) self.curs.execute(sql,tup) matricula = self.curs.fetchall() matricula = matricula[0][0] if matricula==0: matricula = None else: matricula = True if rfid: sql="SELECT count(*) FROM funcionarios WHERE rfid=%s AND ativo=true" tup=(rfid) if id_funcionario!=None: sql=sql+" AND id_funcionario!=%s" tup=(rfid,id_funcionario) self.curs.execute(sql,tup) rfid = self.curs.fetchall() rfid = rfid[0][0] if rfid==0: rfid = None else: rfid = True temp=nome or matricula or rfid; if temp==None: temp=False self.conn.commit() return {'nome':nome,'matricula':matricula,'rfid':rfid,'existe':temp} ## Remove um funcionario do banco de dados e os horarios dele # @param id_funcionario Id do funcionario def remover_Funcionario(self,id_funcionario): if not (isinstance(id_funcionario, long) or isinstance(id_funcionario, int)): return False self.curs.execute("UPDATE funcionarios set ativo=false WHERE id_funcionario=%s",(id_funcionario)) self.remover_Horario_Funcionario(id_funcionario) self.conn.commit() return True ## Remove todos os horarios de um funcionario # @param id_funcionario Id do funcionario def remover_Horario_Funcionario(self,id_funcionario): self.curs.execute("DELETE FROM horarios WHERE id_funcionario=%s",(id_funcionario)) self.conn.commit() ## Obtem todos os horarios cadastrados def obter_Horarios(self): sql="SELECT funcionarios.nome, horarios.dia_da_semana, horarios.hora_inicial, horarios.hora_final FROM horarios INNER JOIN funcionarios ON funcionarios.id_funcionario=horarios.id_funcionario ORDER BY horarios.dia_da_semana ASC,horarios.hora_inicial ASC" self.curs.execute(sql) linhas = self.curs.fetchall() self.conn.commit() return linhas if len(linhas)>0 else False ## Retorna todos os horarios de um funcionario # @param id_funcionario Id do funcionario def buscar_Horarios_de_Funcionario(self,id_funcionario): self.curs.execute("SELECT id_horario, dia_da_semana, hora_inicial,hora_final FROM horarios WHERE id_funcionario=%s ORDER BY dia_da_semana ASC, hora_inicial ASC",(id_funcionario)) linhas = self.curs.fetchall() l=[] if len(linhas)>0: for i in linhas: l.append({'id_horario':i[0],'dia_da_semana':i[1],'hora_inicial':i[2],'hora_final':i[3]}) return l if len(l)>0 else False ## Retorna todas as informações do funcionario # @param id_funcionario Id do funcionario def obter_Funcionario(self,id_funcionario): self.curs.execute("SELECT id_funcionario,nome,matricula,rfid,ativo FROM funcionarios WHERE id_funcionario=%s",(id_funcionario)) linhas = self.curs.fetchall() l={} if len(linhas)>0: i=linhas[0] l={'id_funcionario':i[0],'nome':i[1],'matricula':i[2],'rfid':i[3],'ativo':i[4]} return l if len(linhas)>0 else False ## Retorna os funcionarios esperados para o horario # @param dia_da_semana Dia da semana no formato INT # @param limite_inferior Limite inferior para busca. Formato HH:MM:SS # @param limite_superior Limite superior para a busca. Formato HH:MM:SS def buscar_Funcionarios_Esperados(self,dia_da_semana,limite_inferior,limite_superior): #Adicionado campo horarios.id_horario self.curs.execute("SELECT funcionarios.nome, funcionarios.id_funcionario, horarios.hora_inicial, horarios.hora_final, horarios.id_horario FROM horarios INNER JOIN funcionarios ON horarios.id_funcionario=funcionarios.id_funcionario WHERE horarios.dia_da_semana=%s AND curtime() >= subtime(horarios.hora_inicial,%s) AND curtime() <= addtime(horarios.hora_final,%s)",(dia_da_semana,limite_inferior,limite_superior)) linhas = self.curs.fetchall() l={} if len(linhas)>0: for i in linhas: l[str(i[1])]={'nome':i[0],'hora_inicial':i[2],'hora_final':i[3],'id_horario':i[4]} self.conn.commit() return l if len(l)>0 else False ## Retorna os funcionarios logados # @param dia_da_semana Dia da semana no formato INT # @param limite_inferior Limite inferior para busca. Formato HH:MM:SS # @param limite_superior Limite superior para a busca. Formato HH:MM:SS def buscar_Funcionarios_Esperados_Logados(self,dia_da_semana,limite_inferior,limite_superior): self.curs.execute("SELECT pontos.id_funcionario FROM pontos INNER JOIN horarios ON horarios.id_horario=pontos.id_horario WHERE horarios.dia_da_semana=%s AND curtime() >= subtime(horarios.hora_inicial,%s) AND curtime() <= addtime(horarios.hora_final,%s) AND (pontos.presenca=-1)",(dia_da_semana,limite_inferior,limite_superior)) linhas = self.curs.fetchall() l=[] for i in linhas: l.append(str(i[0])) self.conn.commit() return l if len(l)>0 else False ## Verifica se existe ponto aberto de um funcionario # @param id_funcionario Id do funcionario def buscar_Ponto_Aberto_de_Funcionario(self,id_funcionario): self.curs.execute("SELECT pontos.horario_entrada,horarios.hora_inicial,horarios.hora_final FROM pontos INNER JOIN horarios on pontos.id_horario = horarios.id_horario WHERE pontos.presenca=-1 AND pontos.id_funcionario=%s ORDER BY pontos.id_ponto DESC",(id_funcionario)) #Otimizado por ORDER BY linhas = self.curs.fetchall() l=False if len(linhas)>0: i=linhas[0] l={'horario_entrada':i[0],'hora_inicial':datetime.datetime.combine(i[0].date(),(datetime.datetime.min+i[1]).time()),'hora_final':datetime.datetime.combine(i[0].date(),(datetime.datetime.min+i[2]).time())} self.conn.commit() return l ## Cria o ponto de saida de um funcionario # @param id_funcionario Id do funcionario # @param horario_saida Horario de saida no formato YYYY-MM-DD HH:MM:SS # @presenca 0 para falta. 1 para presença. 2 para ponto nao fechado def finaliza_Ponto(self,id_funcionario,horario_saida,presenca): sql="UPDATE pontos SET horario_saida=%s, presenca=%s WHERE id_funcionario=%s AND presenca=-1" self.curs.execute(sql,(horario_saida,presenca,id_funcionario)) self.conn.commit() return True ## Retorna o horario mais proximo de um funcionario # @param id_funcionario Id do funcionario # @param dia_da_semana Dia da semana no formato INT # @param limite_inferior Limite inferior para busca. Formato HH:MM:SS # @param limite_superior Limite superior para a busca. Formato HH:MM:SS def buscar_Horario_Mais_Proximo_de_Funcionario(self,id_funcionario,dia_da_semana,limite_inferior,limite_superior): sql="SELECT id_horario FROM horarios WHERE (id_funcionario=%s AND dia_da_semana=%s AND curtime()>SUBTIME(time(hora_inicial),time(%s)) AND curtime()<ADDTIME(time(hora_inicial),time(%s))) ORDER BY ABS(SUBTIME(%s,curtime())) LIMIT 1" self.curs.execute(sql,(id_funcionario,dia_da_semana,limite_inferior,limite_superior,limite_inferior)) linhas = self.curs.fetchall() self.conn.commit() return linhas[0][0] if len(linhas)>0 else False ## Cria o ponto de entrada de um funcionario # @param id_funcionario Id do funcionario # @param id_horario Id do horario do funcionario def criar_Ponto(self,id_funcionario,id_horario,presenca=-1): sql="INSERT INTO pontos (id_funcionario,id_horario,horario_entrada,presenca) VALUES (%s,%s,now(),%s)" self.curs.execute(sql,(id_funcionario,id_horario,presenca)) self.conn.commit() return True ## Cria o ponto de falta de um funcionario # @param id_funcionario Id do funcionario # @param id_horario Id do horario do funcionario def criar_Ponto_Falta(self,id_funcionario,id_horario,entrada_data,entrada_hora): sql="INSERT INTO pontos (id_funcionario,id_horario,horario_entrada,presenca) VALUES (%s,%s,concat(%s,' ',%s),0)" self.curs.execute(sql,(id_funcionario,id_horario,entrada_data,entrada_hora)) self.conn.commit() return True ## Adiciona no log da porta o funcionario que entrou e o horario # @param id_funcionario Id do funcionario def adicionar_Log_Porta(self,id_funcionario): sql="INSERT INTO log_porta (id_funcionario,horario_entrada) VALUES (%s,now())" self.curs.execute(sql,(id_funcionario)) self.conn.commit() ## Obtem o log da porta dentro de um periodo de tempo # @param data_inicial Data inicial do log. Formato YYYY-MM-DD HH:MM:SS # @param data_final Data final do log. Formato YYYY-MM-DD HH:MM:SS # @return Nome,Matricula,Horario_entrada def obter_Log_Porta(self,data_inicial,data_final): self.curs.execute("SELECT funcionarios.nome,funcionarios.matricula,log_porta.horario_entrada FROM log_porta INNER JOIN funcionarios on log_porta.id_funcionario = funcionarios.id_funcionario WHERE (log_porta.horario_entrada >= %s AND log_porta.horario_entrada <= %s )",(data_inicial,data_final)) linhas = self.curs.fetchall() return linhas if len(linhas)>0 else None ## Obtem o log dos pontos dentro de um periodo de tempo # @param data_inicial Data inicial do log. Formato YYYY-MM-DD HH:MM:SS # @param data_final Data final do log. Formato YYYY-MM-DD HH:MM:SS # @param presentes Mostrar presença de funcionarios # @param faltas Mostrar falta de funcionarios # @param atrazos Mostrar atrazos de funcionarios # @return Nome,Matricula,Horario_entrada,Horario_saida,Presenca def obter_Log_Pontos(self,data_inicial,data_final): sql="SELECT funcionarios.nome,funcionarios.matricula,pontos.horario_entrada,pontos.horario_saida,SUBTIME(TIME(pontos.horario_saida),TIME(pontos.horario_entrada)),pontos.presenca FROM pontos INNER JOIN funcionarios on pontos.id_funcionario = funcionarios.id_funcionario WHERE (pontos.horario_entrada >= %s AND pontos.horario_entrada <= %s)" self.curs.execute(sql,(data_inicial,data_final)) linhas = self.curs.fetchall() return linhas if len(linhas)>0 else None ## Obtem os pontos que não foram dados # @param data_inicial Data inicial no formato YYYY-MM-DD HH:MM:SS # @param data_final Data final no formato YYYY-MM-DD HH:MM:SS # @param dia_da_semana Dia da semana inteiro # @param limite_superior_ent Limite superior de entrada no formato HH:MM:SS def obter_Pontos_Faltando(self,data_inicial,data_final,dia_da_semana=None,limite_superior_ent=None): sql='SELECT id_horario_2,id_funcionario, hora_inicial,dia_da_semana FROM (SELECT pontos2.id_horario AS id_horario_1,horarios.id_horario AS id_horario_2, horarios.id_funcionario,horarios.hora_inicial,horarios.dia_da_semana FROM (SELECT pontos.* FROM pontos where horario_entrada>=%s and horario_entrada<=%s) AS pontos2 right join horarios on pontos2.id_horario=horarios.id_horario' dados=(data_inicial,data_final) if dia_da_semana!=None: sql=sql+" where horarios.dia_da_semana=%s " dados=(data_inicial,data_final,dia_da_semana) if limite_superior_ent!=None: sql=sql+"and SUBTIME(curtime(),time(horarios.hora_inicial))<=time(%s)" dados=(data_inicial,data_final,dia_da_semana,limite_superior_ent) sql=sql+") AS tabelaTemp where id_horario_1 IS NULL" self.curs.execute(sql,dados) linhas = self.curs.fetchall() return linhas if len(linhas)>0 else False ## Seta o funcionario como presente # @param id_funcionario Id do funcionario # @param horario_entrada Horario de entrada do funcionario # @param limite_superior_entrada Tempo limite de entrada do funcionario def atualiza_Ponto(self, id_funcionario, horario_entrada, limite_inferior_entrada, limite_superior_entrada): sql="UPDATE pontos SET horario_entrada=%s, presenca=%s WHERE id_funcionario=%s AND presenca=0 AND NOW() >= subtime(pontos.horario_entrada,%s) AND NOW() <= addtime(pontos.horario_entrada,%s)" self.curs.execute(sql,(horario_entrada,-1,id_funcionario, limite_inferior_entrada, limite_superior_entrada)) self.conn.commit() return True ## Fecha todos os pontos ainda abertos ate o dia anterior def fecha_pontos_abertos(self): sql="UPDATE pontos SET presenca=%s WHERE presenca=-1 AND subtime(NOW(),'1 0:0:0') > pontos.horario_entrada" self.curs.execute(sql,(2)) self.conn.commit() return True ## Procura ponto recente de funcionario # @param id_funcionario Id do funcionario # @param presenca1 Tipo de presenca a ser procurada # @param presenca2 Tipo de presenca a ser procurada def procura_ponto_recente(self, id_funcionario, presenca1=-1, presenca2=0): #sql="SELECT pontos.id_ponto FROM pontos INNER JOIN horarios ON pontos.id_horario = horarios.id_horario WHERE pontos.id_funcionario = %s AND DATEDIFF(CURDATE(), pontos.horario_entrada) < 1 AND (TIMEDIFF(CURTIME(), horarios.hora_final) < ADDTIME((SELECT dado FROM configuracoes WHERE tipo='tol_sai_dep'), '00:05:00' ) AND ( pontos.presenca = %s OR pontos.presenca = %s )" sql="SELECT pontos.id_ponto FROM pontos INNER JOIN horarios ON pontos.id_horario = horarios.id_horario WHERE pontos.id_funcionario = %s AND DATEDIFF(CURDATE(), pontos.horario_entrada) < 1 AND TIMEDIFF(CURTIME(), horarios.hora_final) < '02:00:00' AND ( pontos.presenca = %s OR pontos.presenca = %s )" #EU ODEIO O WINDOWS self.curs.execute(sql,(id_funcionario, presenca1, presenca2)) linhas = self.curs.fetchall() l=False if len(linhas)>0: l=linhas[0][0] self.conn.commit() return l ## Fecha ponto ao deslogar o usuario # @param id_ponto Id do ponto def fecha_ponto_ao_deslogar_usuario(self, id_ponto): sql="UPDATE pontos SET presenca=%s WHERE pontos.id_ponto = %s" self.curs.execute(sql,(2, id_ponto)) self.conn.commit() return True