def atualiza_info(nome, ultima_pontuacao): if ultima_pontuacao < 0: retorno = 2 else: sqlAtualizaPts = """ UPDATE Jogador SET pontuacao_total = pontuacao_total + %s WHERE nome = %s """ sqlAtualizaRecorde = """ UPDATE Jogador SET recorde = %s WHERE nome = %s AND recorde < %s """ banco = bd.abre_acesso() banco['cursor'].execute(sqlAtualizaPts, (ultima_pontuacao, nome)) if banco['cursor'].rowcount == 1: banco['cursor'].execute(sqlAtualizaRecorde, (ultima_pontuacao, nome, ultima_pontuacao)) _atualiza_rank(banco) retorno = 0 else: retorno = 1 bd.fecha_acesso(banco) return retorno
def insere(nome): if not nome: #nome nulo return 1 sqlSearch = " SELECT nome FROM Jogador WHERE nome = %s" sqlInsert = "INSERT INTO Jogador VALUES (%s, %s, %s, %s, %s)" banco = bd.abre_acesso() banco['cursor'].execute(sqlSearch, (nome, )) if (banco['cursor'].rowcount > 0): #nome já registrado bd.fecha_acesso(banco) return 2 data = datetime.now().date() #data de hoje ranking = None pontuacao = recorde = 0 banco['cursor'].execute(sqlInsert, (nome, data, pontuacao, recorde, ranking)) _atualiza_rank(banco) bd.fecha_acesso(banco) return 0
def registra_desistencia(nome_jogador, data_horario): #scripts sql usados ao longo da função sqlSearch_tab_pontuacao = ''' SELECT pontuacao FROM Tabela_Pontuacao WHERE nome_jogador = %s AND data_horario = %s''' sqlUpdate_tabela = ''' UPDATE Tabela SET desistencia = True WHERE data_horario = %s AND nome_jogador = %s''' sqlUpdate_tab_pontuacao = ''' UPDATE Tabela_Pontuacao SET pontuacao = 0 WHERE data_horario = %s AND nome_jogador = %s AND pontuacao IS NULL''' banco = bd.abre_acesso() if not _tabela_jogador_partida_existe(banco, nome_jogador, data_horario)\ or not _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario): return 1 banco['cursor'].execute(sqlSearch_tab_pontuacao, (nome_jogador, data_horario)) tuplas = banco['cursor'].fetchall() todas_tuplas_preenchidas = True for tupla in tuplas: if tupla['pontuacao'] == None: todas_tuplas_preenchidas = False break if todas_tuplas_preenchidas: return 2 banco['cursor'].execute(sqlUpdate_tabela, (data_horario, nome_jogador)) banco['cursor'].execute(sqlUpdate_tab_pontuacao, (data_horario, nome_jogador)) bd.fecha_acesso(banco) return 0
def obtem_partidas(data_horario=[], status=[]): if isinstance(data_horario, datetime): data_horario = [data_horario] if isinstance(status, str): status = [status] if not isinstance(data_horario, list) or not isinstance(status, list): return 1 sqlBusca = """ SELECT * FROM Partida""" banco = banco_de_dados.abre_acesso() if data_horario: sqlBusca += ' WHERE data_horario in (%s{})'.format( (len(data_horario) - 1) * ',%s') if status: sqlBusca += ' AND status in (%s{})'.format( (len(status) - 1) * ',%s') banco['cursor'].execute(sqlBusca, data_horario + status) elif status: sqlBusca += ' WHERE status in (%s{})'.format((len(status) - 1) * ',%s') banco['cursor'].execute(sqlBusca, status) else: banco['cursor'].execute(sqlBusca) resultado = [dictPartida for dictPartida in banco['cursor']] banco_de_dados.fecha_acesso(banco) return resultado
def inicia_partida(nomes): if _ha_partida_em_andamento(): return 2 if any(not valida_jogador(jogador) for jogador in nomes): return 1 data_horario = datetime.now().replace(microsecond=0) banco = banco_de_dados.abre_acesso() sql_partida = """INSERT INTO Partida VALUES (%s, %s)""" banco['cursor'].execute(sql_partida, (data_horario, 'andamento')) banco_de_dados.fecha_acesso(banco) for jogador in nomes: cod_retorno = tabela.cria_tabela(jogador, data_horario) shuffle(nomes) partida_atual['data_horario'] = data_horario partida_atual['combinacao'] = None partida_atual['pts_combinacao'] = None partida_atual['turno'] = 1 partida_atual['tentativas'] = 3 partida_atual['jogadores'] = nomes partida_atual['jogador_da_vez'] = nomes[0] partida_atual['status'] = 'andamento' partida_atual['salva'] = False return data_horario
def _altera_status_bd(status): sql = """UPDATE Partida SET status = %s WHERE data_horario = %s""" banco = banco_de_dados.abre_acesso() banco['cursor'].execute(sql, (status, partida_atual['data_horario'])) banco_de_dados.fecha_acesso(banco) return
def valida_jogador(nome): sqlBusca = """ SELECT nome FROM Jogador WHERE nome = %s """ banco = bd.abre_acesso() banco['cursor'].execute(sqlBusca, (nome, )) encontrado = banco['cursor'].rowcount == 1 bd.fecha_acesso(banco) return encontrado
def remove(nome): sqlRemove = """ DELETE FROM Jogador WHERE nome = %s """ banco = bd.abre_acesso() banco['cursor'].execute(sqlRemove, (nome, )) retorno = 1 if banco['cursor'].rowcount == 0 else 0 _atualiza_rank(banco) bd.fecha_acesso(banco) return retorno
def remove(nome_jogador, data_horario): sqlDelete_tab_pont = ''' DELETE FROM Tabela_Pontuacao WHERE data_horario = %s AND nome_jogador = %s''' sqlDelete_tabela = ''' DELETE FROM Tabela WHERE data_horario = %s AND nome_jogador = %s''' banco = bd.abre_acesso() if not _tabela_jogador_partida_existe(banco, nome_jogador, data_horario)\ or not _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario): return 1 banco['cursor'].execute(sqlDelete_tab_pont, (data_horario, nome_jogador)) banco['cursor'].execute(sqlDelete_tabela, (data_horario, nome_jogador)) bd.fecha_acesso(banco) return 0
def obtem_info(nomes): if type(nomes) == list and all(type(nome) == str for nome in nomes): sqlBusca = "SELECT * FROM Jogador " if nomes: sqlBusca += "WHERE nome = %s " for i in range(len(nomes) - 1): sqlBusca += "OR nome = %s" banco = bd.abre_acesso() banco['cursor'].execute(sqlBusca, nomes) retorno = [dictJogador for dictJogador in banco['cursor']] bd.fecha_acesso(banco) else: retorno = 1 return retorno
def obtem_tabelas(nomes, data_horarios): banco = bd.abre_acesso() #tratamento das possibilidades das listas fornecidas serem vazias. #Variável tuplas_tabela terá infos dos jogadores/partidas extraídas #da relação Tabela do banco de dados if nomes == [] and data_horarios == []: tuplas_tabela = obtem_tab_ambas_vazias(banco) elif nomes == []: tuplas_tabela = obtem_tab_nomes_vazia(banco, data_horarios) if tuplas_tabela == []: return 1 elif data_horarios == []: tuplas_tabela = obtem_tab_datas_vazia(banco, nomes) if tuplas_tabela == []: return 1 else: tuplas_tabela = obtem_tab_nenhuma_vazia(banco, nomes, data_horarios) if tuplas_tabela == []: return 1 #script sql usado para buscar pontuação por categoria do jogador sqlSearch_tab_pont = ''' SELECT nome_categoria as nome, pontuacao FROM Tabela_Pontuacao WHERE data_horario = %s AND nome_jogador = %s''' for elemento in tuplas_tabela: #converte para booleano, pois mysql não tem tipo de dado para isso if elemento['desistencia'] == 0: elemento['desistencia'] = False else: elemento['desistencia'] = True #preenche pontuacao por categoria da lista a ser retornada banco['cursor'].execute( sqlSearch_tab_pont, (elemento['data_horario'], elemento['nome_jogador'])) lista_pontos_categoria = banco['cursor'].fetchall() elemento['pontos_por_categoria'] = lista_pontos_categoria bd.fecha_acesso(banco) return tuplas_tabela
def _carrega_dados_partida_atual(root): partida_atual.clear() data_horario_string = root.find('data_horario').text partida_atual['data_horario'] = datetime.strptime(data_horario_string, "%Y-%m-%d %H:%M:%S") banco = banco_de_dados.abre_acesso() sql_partida = """INSERT INTO Partida VALUES (%s, %s)""" try: banco['cursor'].execute(sql_partida, (partida_atual['data_horario'], 'andamento')) except: sql_partida = """UPDATE Partida SET status="andamento" where data_horario = %""" try: banco['cursor'].execute(sql_partida, (partida_atual['data_horario'])) except: pass banco_de_dados.fecha_acesso(banco) partida_atual['combinacao'] = list() for dado in root.find('combinacao').findall('dado'): partida_atual['combinacao'].append(int(dado.text)) if partida_atual['combinacao']: combinacao.inicializa_combinacao(partida_atual['combinacao']) pts = partida_atual['pts_combinacao'] = list() for categoria in root.find('pts_combinacao').findall('categoria'): pts.append({ 'nome': categoria.find('nome').text, 'pontuacao': int(categoria.find('pontuacao').text) }) jogs = partida_atual['jogadores'] = list() for jogador in root.find('jogadores').findall('nome'): jogs.append(jogador.text) partida_atual['turno'] = int(root.find('turno').text) partida_atual['tentativas'] = int(root.find('tentativas').text) partida_atual['jogador_da_vez'] = root.find('jogador_da_vez').text partida_atual['status'] = 'andamento' partida_atual['salva'] = True return
def insere_pontuacao(nome_jogador, data_horario, categoria, pontuacao): if pontuacao < 0: return 3 #scripts sql usados ao longo da funçao: sqlSearch_Categoria = ''' SELECT nome_categoria FROM Tabela_Pontuacao WHERE nome_categoria = %s''' sqlSearch_Pontos = ''' SELECT pontuacao FROM Tabela_Pontuacao WHERE nome_categoria = %s AND nome_jogador = %s AND data_horario = %s''' sqlUpdate_tab_pont = ''' UPDATE Tabela_Pontuacao SET pontuacao = %s WHERE data_horario = %s AND nome_jogador = %s AND nome_categoria = %s''' sqlUpdate_tabela = ''' UPDATE Tabela SET pontuacao_total = pontuacao_total + %s WHERE data_horario = %s AND nome_jogador = %s''' banco = bd.abre_acesso() if not _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario): return 1 banco['cursor'].execute(sqlSearch_Categoria, (categoria, )) if banco['cursor'].rowcount == 0: return 2 banco['cursor'].execute(sqlSearch_Pontos, (categoria, nome_jogador, data_horario)) pontuacao_bd = banco['cursor'].fetchone() if pontuacao_bd['pontuacao'] is not None: return 4 banco['cursor'].execute(sqlUpdate_tab_pont, (pontuacao, data_horario, nome_jogador, categoria)) banco['cursor'].execute(sqlUpdate_tabela, (pontuacao, data_horario, nome_jogador)) _atualiza_colocacao(banco, data_horario) bd.fecha_acesso(banco) return 0
def cria_tabela(nome_jogador, data_horario): if not jogador.valida_jogador(nome_jogador): return 1 #scripts sql de inserção das infos dos novos jogadores nas duas #relações do banco de dados referentes a cartela (Tabela e #Tabela_Pontuacao) sqlInsert_tab = ''' INSERT INTO Tabela VALUES (%s,%s,%s,%s,%s) ''' sqlInsert_tab_pont = ''' INSERT INTO Tabela_Pontuacao VALUES (%s,%s,%s,%s) ''' banco = bd.abre_acesso() if _tabela_jogador_partida_existe(banco, nome_jogador, data_horario): bd.fecha_acesso(banco) return 2 if _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario): bd.fecha_acesso(banco) return 2 pontuacao_total = 0 colocacao = None desistencia = False banco['cursor'].execute( sqlInsert_tab, (data_horario, nome_jogador, pontuacao_total, colocacao, desistencia)) categorias = categoria.obtem_nomes() for cat in categorias: nome_categoria = cat['nome'] pontuacao = None banco['cursor'].execute( sqlInsert_tab_pont, (data_horario, nome_jogador, nome_categoria, pontuacao)) bd.fecha_acesso(banco) return 0