1
resposta

Script de Python para inserir todos os produtos

Fiz a inserções dos produtos via um script simples em python.

Caso alguém queira fazer as inserções de uma única vez o script está abaixo

import cx_Oracle
import pandas as pd

class Extrator:
    def __init__(self, linha):
        self.linha = linha
        self.descritor = linha[1]

    def split_descritor(self):
        return self.descritor.split('-')

    def split_linha(self):
        return [item for item in self.linha]

    def get_id(self):
        return self.split_linha()[0]

    def get_descritor(self):
        return self.descritor

    def get_embalagem(self):
        return self.split_linha()[2]

    def get_tamanho(self):
        return self.split_descritor()[1].strip()

    def get_sabor(self):
        return self.split_descritor()[2].strip()

    def get_preco(self):
        return self.split_linha()[3]

    def __str__(self):
        return f'ID: {self.get_id()} - Descritor: {self.get_descritor()} - Embalagem: {self.get_embalagem()} - ' \
               f'Tamanho: {self.get_tamanho()} - Sabor: {self.get_sabor()} - Preco: {self.get_preco()}'


# Lendo excel

df = pd.read_excel(r"caminho_ate_o_arquivo\PRODUTOS.xlsx", engine='openpyxl') # necessita ter o pacote openpyx
df.drop(df.iloc[:,4:], inplace=True, axis=1)


# Iniciando conexão

# servidor, porta e serviço -> so utilizar o que é disponibilizado nos detalhes da 
#conexao via sql developer
dsn_tns = cx_Oracle.makedsn('localhost', '1521', service_name='XE') 

connection = cx_Oracle.connect(
    user="system", # Usuario
    password="SUA_SENHA", # Senha
    dsn=dsn_tns) # Detalhes da conexão

print("Conexão com o database realizada!")



cursor = connection.cursor()


# Elimina tabela

cursor.execute("""
    begin
        execute immediate 'drop table TB_PRODUTOS';
        exception when others then if sqlcode <> -942 then raise; end if;
    end;""")

# Criando tabela

cursor.execute("""
    create table TB_PRODUTOS (
        PRODUTO VARCHAR2(20),
        NOME VARCHAR2(150),
        EMBALAGEM VARCHAR2(50),
        TAMANHO VARCHAR2(50),
        SABOR VARCHAR2(50),
        PRECO_LISTA FLOAT
        )""")

# Definindo chave primaria

cursor.execute("""
    alter table TB_PRODUTOS add constraint PK_TB_PRODUTO primary key (PRODUTO)""")

for row in df.itertuples(index=False):
    extrator = Extrator(row)
    tup = (extrator.get_id(), extrator.get_descritor(), extrator.get_embalagem(), extrator.get_tamanho(), extrator.get_sabor(), extrator.get_preco())
    cursor.execute("insert into TB_PRODUTOS (PRODUTO, NOME, EMBALAGEM, TAMANHO, SABOR, PRECO_LISTA) values(:1, :2, :3, :4, :5, :6)", tup)
    print(cursor.rowcount, "Linha inserida")

connection.commit()
cursor.close()
connection.close()

Me baseei no tutorial da oracle -> link https://www.oracle.com/database/technologies/appdev/python/quickstartpythononprem.html

Apontamentos de erros e melhorias no código são bem vindos.

1 resposta

Olá, Mateus! Tudo bem?

Peço desculpas pela demora em te responder.

O script que você postou é bem interessante e parece que está funcionando corretamente. É sempre bom automatizar processos que podem ser repetitivos e o seu script faz exatamente isso, inserindo todos os produtos de uma só vez.

Obrigada por compartilhar com o fórum! Esses conhecimentos são muito enriquecedores para a nossa comunidade.

Abraço!