Skip to content

Instantly share code, notes, and snippets.

@jhowbhz
Last active October 17, 2023 16:05
Show Gist options
  • Save jhowbhz/67f1dbfa27ca00c86234fe73dfa16779 to your computer and use it in GitHub Desktop.
Save jhowbhz/67f1dbfa27ca00c86234fe73dfa16779 to your computer and use it in GitHub Desktop.
XLSX to MYSQL Create and Inserts
import pandas as pd
import mysql.connector
import os
import psutil
import openpyxl # Você precisa instalar essa biblioteca com 'pip install openpyxl'
# Configurações do banco de dados
db_config = {
"host": "your_host",
"user": "your_user",
"password": "your_password",
"port": "your_port",
"database": "database"
}
# Diretório onde os arquivos XLSX estão localizados
xlsx_dir = r"/YOUR_DIRECTORY_FILES"
# Função para criar uma tabela no MySQL com base em um DataFrame
def create_table_from_dataframe(cursor, table_name, df):
create_table_query = f"CREATE TABLE IF NOT EXISTS `{table_name}` ("
for column in df.columns:
if "fk_" in column or column == "ID" or column == "id":
create_table_query += f"`{column}` BIGINT NOT NULL, "
else:
create_table_query += f"`{column}` VARCHAR(255), "
create_table_query = create_table_query[:-2] # Remova a vírgula extra no final
create_table_query += ");"
cursor.execute(create_table_query)
# Função para importar dados de um arquivo XLSX em uma tabela MySQL
def import_xlsx_to_mysql(mysql_connection, table_name, xlsx_file):
cursor = mysql_connection.cursor()
try:
# Carregue o arquivo XLSX em um DataFrame
df = pd.read_excel(xlsx_file, engine='openpyxl')
# Crie a tabela no MySQL
create_table_from_dataframe(cursor, table_name, df)
total_inserted = 0 # Contador para o número total de inserções
for _, row in df.iterrows():
# Substitua valores 'nan' por uma string vazia antes de inserir
row = ['' if pd.isna(value) else value for value in row]
# Gere a consulta de inserção
columns = ", ".join(df.columns)
placeholders = ", ".join(["%s"] * len(df.columns))
insert_query = f"INSERT INTO `{table_name}` ({columns}) VALUES ({placeholders});"
cursor.execute(insert_query, tuple(row))
mysql_connection.commit() # Commit após cada inserção
total_inserted += 1 # Incrementa o contador de inserções
print(f"Inserido {total_inserted} registros | Média de memória usada: {psutil.virtual_memory().percent}% | Média de CPU usada: {psutil.cpu_percent()}%", end="\r")
return total_inserted
except Exception as err:
print(f"Erro ao importar arquivo {xlsx_file}: {str(err)}")
return 0
finally:
cursor.close()
# Conecte-se ao banco de dados
mydb = mysql.connector.connect(**db_config)
# Liste todos os arquivos XLSX no diretório
xlsx_files = [f for f in os.listdir(xlsx_dir) if f.endswith(".xlsx")]
# Inicialize um contador para rastrear o número total de inserções
total_inserted = 0
# Importe cada arquivo XLSX em uma tabela separada
for xlsx_file in xlsx_files:
table_name = os.path.splitext(os.path.basename(xlsx_file))[0]
try:
insert_count = import_xlsx_to_mysql(mydb, table_name, os.path.join(xlsx_dir, xlsx_file))
total_inserted += insert_count # Incrementa o contador de inserções
print(f"Arquivo {xlsx_file} inserido no banco de dados. Total inserido: {insert_count} registros.")
except Exception as e:
print(f"Erro ao importar arquivo {xlsx_file}: {str(e)}")
# Feche a conexão com o banco de dados
mydb.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment