1
resposta

[Dúvida] Meu codigo nao rodou

import sqlite3

conn = sqlite3.connect('flamengo.db')

cursor = conn.cursor()

cursor.execute(
"""
SELECT jogadores.nome, competicoes.nome_competicao FROM competicoes JOIN jogadores ON competicoes.jogador_id
"""
)

jogadores = cursor.fetchall()

for jogador in jogadores:
print(jogador)

conn.commit()

conn.close()

Esta dando erro de sintaxe.

1 resposta

Ola.

O erro de sintaxe aí vem de dois problemas diferentes no código, um de SQL e outro de Python. Vou separar porque isso ajuda bastante a entender.

Primeiro, o erro de SQL.
No JOIN, você escreveu:

FROM competicoes 
JOIN jogadores 
ON competicoes.jogador_id

O ON não pode ficar sozinho. Ele precisa de uma condição completa, comparando colunas das duas tabelas. Algo assim:

ON competicoes.jogador_id = jogadores.id

Ou seja, você precisa dizer com qual coluna da tabela jogadores o jogador_id se relaciona. Sem isso, o SQLite acusa erro de sintaxe mesmo.

O SQL correto ficaria, por exemplo:

SELECT jogadores.nome, competicoes.nome_competicao
FROM competicoes
JOIN jogadores
ON competicoes.jogador_id = jogadores.id

Segundo problema: indentação no Python.
No trecho final, o print(jogador) não está indentado:

for jogador in jogadores:
print(jogador)

Em Python isso gera erro, porque tudo que está dentro do for precisa ficar indentado. O correto é:

for jogador in jogadores:
    print(jogador)

Corrigindo os dois pontos, o código passa a rodar normalmente.