Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
4
respostas

Syntax Error

Por algum motico, o código de criar tabela de estudantes não funciona, e com isso o resto do código também não funciona por referenciar students

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

import sqlite3

def plugin():
    conn = sqlite3.connect('school.db')
    return conn

def create_table_students():
    conn = plugin()
    cursor = conn.cursor()
    cursor.execute(
        """
            CREATE TABLE IF NOT EXISTS students(
            id INTEGER PRIMARY KEY,
            name TEXT,
            age INTEGER,
            )
        """
    )
    conn.commit()
    conn.close()


def create_table_enrollment():
    conn = plugin()
    cursor = conn.cursor()
    cursor.execute(
        """
            CREATE TABLE IF NOT EXISTS enrollments(
            id INTEGER PRIMARY KEY,
            name_discipline TEXT,
            student_id INTEGER,
            FOREIGN KEY (student_id) REFERENCES students(id)
            )
        """
    )
    conn.commit()
    conn.close()


def create_student(name, age):
    conn = plugin()
    cursor = conn.cursor()
    cursor.execute(
        """
            INSERT INTO students (name, age) \
            VALUES (?,?)
        """, (name, age)
    )
    conn.commit()
    conn.close()

def list_students():
    conn = plugin()
    cursor = conn.cursor()
    cursor.execute(
        """
            SELECT * FROM students
        """
    )

    students = cursor.fetchall()
    for student in students:
        print(student)
    conn.commit()
    conn.close()

O que eu faço?

4 respostas
solução!

Olá, Hassan, como vai?

Há um detalhe na instrução CREATE TABLE da tabela students que impede sua criação. Na definição das colunas, existe uma vírgula após age INTEGER, antes do fechamento do parêntese. Em SQLite, essa vírgula extra torna a instrução inválida e gera um erro de sintaxe. O trecho correto fica assim:

CREATE TABLE IF NOT EXISTS students(
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
)

Como a tabela students não é criada, todas as operações seguintes que dependem dela, como inserir registros ou criar a chave estrangeira na tabela enrollments, também deixam de funcionar. Uma boa prática é executar apenas a função create_table_students() e verificar a mensagem completa de erro exibida no terminal, pois ela costuma indicar a linha onde ocorreu a falha. Também vale remover o arquivo school.db após corrigir o código e executá lo novamente, garantindo que o banco seja recriado do zero.

Você conseguiu testar a criação da tabela após remover essa vírgula e verificar se o banco passou a ser criado corretamente?

Conte com o fórum caso surjam novas dúvidas. Estamos à disposição para ajudar.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Estranho, agora o exec não está mais funcionando, quando tinha funcionado antes.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi, Hassan.

Pela imagem, o comando está sendo executado diretamente no PowerShell, e não no interpretador do Python.

Primeiro entre no interpretador com:

python3

Após aparecer o prompt >>>, execute:

exec(open("db.py").read())

Assim o comando será interpretado pelo Python.

Não acredito que esqueci disso!

Agora está funcionando direitinho!

Obrigado!