Pular para o conteúdo principal

Questão de Banco de Dados — MySQL — CESPE / CEBRASPE 2024

Banco de DadosMySQL
Código
ce403629
Banca
CESPE / CEBRASPE
Órgão
CNJ
Ano
2024
Cargo
TJ
import mysql.connector from mysql.connector import Error try:     connection = mysql.connector.connect(host='localhost', database='testdb', user='user', password='password')      cursor = connection.cursor()      with open('data.txt', 'r') as file:           for line in file:                query = “INSERT INTO records (content) VALUES (%s)”                  cursor.execute(query, (line,))                  connection.commit() except Error as e:         print(“Error while connecting to MySQL”, e) finally:    if connection.is_connected():        cursor.close()        connection.close()   Tendo como referência o código precedente, julgue o item que se segue, em relação à linguagem de programação Python. A função cursor.execute() é capaz de executar uma consulta SQL que tenha sido passada por uma string.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Python e MySQL: cursor.execute() e strings SQL

Gabarito: Certo. A função cursor.execute() do conector MySQL para Python aceita, sim, uma string contendo uma consulta SQL — é exatamente o que o código do enunciado faz ao passar query = "INSERT INTO records (content) VALUES (%s)" como primeiro argumento. A afirmação é verdadeira e reflete o funcionamento padrão da API de banco de dados do Python (DB-API 2.0), que o mysql.connector implementa.

O cursor.execute() é o método responsável por enviar uma instrução SQL ao banco de dados. Ele recebe, no mínimo, dois argumentos: a string com o comando SQL e, opcionalmente, uma tupla ou dicionário com os parâmetros a serem substituídos nos placeholders (como o %s). No código apresentado, a string query contém um INSERT com um placeholder %s, e a tupla (line,) fornece o valor que será inserido — cada linha do arquivo data.txt vira um registro na tabela records.

É importante notar que o execute() não se limita a consultas de leitura (SELECT); ele executa qualquer comando SQL, incluindo INSERT, UPDATE, DELETE, CREATE TABLE, entre outros. A palavra "consulta" no enunciado pode dar a entender que se trata apenas de SELECT, mas no contexto de programação com bancos de dados, "consulta" é frequentemente usada de forma genérica para qualquer instrução SQL enviada ao SGBD. O que o método faz é compilar e executar a string SQL fornecida, retornando o resultado quando aplicável.

A pegadinha aqui é sutil: o candidato pode achar que cursor.execute() só executa SELECT ou que a string precisa ser de um tipo especial. Na verdade, o método aceita qualquer string SQL válida, e o uso de placeholders (%s) é justamente uma prática recomendada para evitar injeção de SQL, pois os valores são enviados separadamente e escapados pelo driver.

Outro ponto que merece destaque é o uso de connection.commit() dentro do loop. No MySQL, por padrão, o conector inicia uma transação implicitamente, e o commit() é necessário para persistir as alterações. Sem ele, as inserções seriam revertidas ao fechar a conexão. O código também trata erros com try/except e fecha cursor e conexão no bloco finally, o que é uma boa prática.

Guarde o critério decisivo: cursor.execute() aceita uma string SQL como primeiro argumento, independentemente de ser um SELECT, INSERT, UPDATE ou outro comando. É essa generalidade que torna a afirmação correta.

  1. 1Recebe string SQL
  2. 2Aceita qualquer comando (SELECT, INSERT...)
  3. 3Placeholder %s + tupla de parâmetros
  4. 4Envia ao SGBD para execução
LEVEL · soulevel.com.br

Item — ✅ CERTO

A afirmação "A função cursor.execute() é capaz de executar uma consulta SQL que tenha sido passada por uma string" está correta. O método execute() da classe Cursor do mysql.connector (e de qualquer driver que siga a DB-API 2.0 do Python) recebe uma string contendo a instrução SQL como primeiro parâmetro. No código do enunciado, isso fica evidente:

query = "INSERT INTO records (content) VALUES (%s)"
cursor.execute(query, (line,))

A string query é passada diretamente ao execute(), que a envia ao MySQL para execução. O segundo argumento, (line,), é a tupla de parâmetros que substitui o placeholder %s de forma segura. Não há restrição de que a string seja de um tipo específico ou que o comando seja apenas de leitura — qualquer instrução SQL válida pode ser executada dessa forma.

O erro que o candidato poderia cometer é achar que execute() só funciona com SELECT ou que a string precisa ser formatada de outra maneira. Na prática, o método é genérico e aceita qualquer comando SQL, sendo o INSERT do exemplo uma prova disso. A afirmação está em conformidade com a documentação do mysql.connector e com o padrão DB-API 2.0 da linguagem Python.

PEGA ESSA DICA!

Na prova, desconfie de afirmações que limitam a função de um método. cursor.execute() executa qualquer SQL — SELECT, INSERT, UPDATE, DELETE, CREATE — desde que a string seja válida. Memorize que o primeiro argumento é sempre a string SQL e o segundo, opcional, são os parâmetros. Essa generalidade é o que a banca testa aqui.

Gabarito: Certo

Link permanente: /questoes/ce403629