1
resposta

Informações das colunas e os valores %s na execução das funções

Fiz só um pouquinho diferente, e queria saber se colocar as informações das colunas e os valores %s na execução das funções é melhor ou pior. Na minha interpretação quis deixar de maneira que qualquer tabela que eu for inserir, eu preciso editar as colunas e a quantidade de %s de acordo com as colunas. Estou correta?

Abaixo segue meu código, que rodou sem erros:

import mysql.connector
import pandas as pd

def connection (hostname, username, passwordinfo):
    cnx = mysql.connector.connect(
        host= hostname,
        user=username,
        password=passwordinfo
    )
    print("mysql successfuly connected!")
    return cnx


def tool (cnx):
    cursor = cnx.cursor()
    print("cursor successfully opened!")
    return cursor


def creating_database(cursor, databasename):
    query = f"CREATE DATABASE IF NOT EXISTS {databasename};"
    cursor.execute(query)
    print(f"\nDatabase {databasename} created!")

def show_databases (cursor):
    cursor.execute("SHOW DATABASES;")

    for db in cursor:
        print(db)

def read_csv(path):
    df = pd.read_csv(path)
    return df

def creating_table (cursor, databasename, tablename, columnsinfo):
    query = f"""
        CREATE TABLE IF NOT EXISTS {databasename}.{tablename} (
            {columnsinfo}
        );             
    """
    cursor.execute(query)

def show_tables (cursor, databasename):
    cursor.execute(f"USE {databasename}")
    cursor.execute("SHOW TABLES;")

    for db in cursor:
        print(db)

def insert_values (cursor, cnx, df, databasename, tablename, valuesplace):
    lista_dados = [tuple(row) for _, row in df.iterrows()]
    sql = f"INSERT INTO {databasename}.{tablename} VALUES ({valuesplace});"
    cursor.executemany(sql, lista_dados)
    print(f"\n{cursor.rowcount}, dados inseridos na tabela {tablename}.")
    cnx.commit()

def closing_connection(cursor, cnx):
    cursor.close()
    cnx.close()

if __name__ == "__main__":
    
    # estabelecendo a conexão:
    cnx = connection(
        "localhost",
        "jessicalvc",
        "minhasenha"
    )
    cursor = tool(cnx)

    # criando base de dados:
    creating_database(cursor,"dbprodutos2") 
    show_databases(cursor)

    # subindo o arquivo para dataframe:
    df = read_csv("/home/jessica/pipeline-python-mongo-mysql/data/tabela_livros.csv")

    # criando tabela e informando colunas:
    creating_table(cursor, "dbprodutos2", "tb_livros", 
    "id VARCHAR(100), " \
    "Produto VARCHAR(100), " \
    "Categoria_Produto VARCHAR(100), " \
    "Preco FLOAT(10,2), Frete FLOAT(10,2), " \
    "Data_Compra DATE, Vendedor VARCHAR(100), " \
    "Local_Compra VARCHAR(100), " \
    "Avaliação_Compra INT, " \
    "Tipo_Pagamento VARCHAR(100), " \
    "Qtde_Parcelas INT, " \
    "Latitude FLOAT(10,2), " \
    "Longitude FLOAT(10,2), " \
    "" \
    "PRIMARY KEY (id)"
    )

    show_tables (cursor, "dbprodutos2")

    # subindo os valores:
    
    insert_values (cursor, cnx, df, "dbprodutos2", "tb_livros", "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s")
   
    closing_connection(cursor, cnx)
1 resposta

Olá, Jéssica! Como vai?

Parabéns! Mantenha o ritmo nos exercícios e continue compartilhando na nossa comunidade.

Você usou um %s para cada coluna que está inserindo na execução da função. No seu caso, a tabela tb_livros tem 13 colunas, por isso você usou 13 %s com uma ordem relacionada à ordem das colunas na definição da tabela.

Sim, a sua abordagem também é correta! E não afeta o desempenho do código a ponto de ser melhor ou pior do que a solução apresentada pela pessoa instrutora. Aliás, é sempre bom conhecer múltiplas maneiras de se resolver uma mesma situação-problema, isso é algo mágico e recorrente na programação.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!