Update app.py
Browse files
app.py
CHANGED
@@ -58,16 +58,58 @@ def get_active_csv_path():
|
|
58 |
logging.info(f"[CSV] Usando arquivo CSV padrão: {DEFAULT_CSV_PATH}")
|
59 |
return DEFAULT_CSV_PATH
|
60 |
|
61 |
-
def
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
def handle_csv_upload(file):
|
73 |
global engine, db, sql_agent
|
|
|
58 |
logging.info(f"[CSV] Usando arquivo CSV padrão: {DEFAULT_CSV_PATH}")
|
59 |
return DEFAULT_CSV_PATH
|
60 |
|
61 |
+
def create_or_load_sql_database(csv_path, sql_db_path):
|
62 |
+
if os.path.exists(sql_db_path):
|
63 |
+
print("Banco de dados SQL já existe. Carregando...")
|
64 |
+
return create_engine(f"sqlite:///{sql_db_path}")
|
65 |
+
else:
|
66 |
+
print("Banco de dados SQL não encontrado. Criando...")
|
67 |
+
engine = create_engine(f"sqlite:///{sql_db_path}")
|
68 |
+
|
69 |
+
df = pd.read_csv(
|
70 |
+
csv_path,
|
71 |
+
sep=";",
|
72 |
+
encoding='utf-8',
|
73 |
+
parse_dates=["DATA_INICIAL_TABLOIDE_PROMOCAO_ANUNCIO", "DATA_FINAL_TABLOIDE_PROMOCAO_ANUNCIO"],
|
74 |
+
dayfirst=True,
|
75 |
+
on_bad_lines="skip"
|
76 |
+
)
|
77 |
+
|
78 |
+
colunas_para_float = [
|
79 |
+
"PRECO", "PRECO_SEM_DESCONTO"
|
80 |
+
]
|
81 |
+
|
82 |
+
colunas_para_int = [
|
83 |
+
"QUANTIDADE_DIAS_VALIDADE_TABLOIDE_PROMOCAO_ANUNCIO", "TOTAL_PAGINAS_TABLOIDE_PROMOCAO_ANUNCIO", "MEDIDA_PRODUTO_SKU"
|
84 |
+
]
|
85 |
+
|
86 |
+
for col in colunas_para_float:
|
87 |
+
if col in df.columns:
|
88 |
+
df[col] = pd.to_numeric(df[col].replace("-", None), errors="coerce")
|
89 |
+
|
90 |
+
for col in colunas_para_int:
|
91 |
+
if col in df.columns:
|
92 |
+
df[col] = pd.to_numeric(df[col].replace("-", None), errors="coerce")
|
93 |
+
df[col] = df[col].where(df[col].dropna() == df[col].dropna().astype(int))
|
94 |
+
df[col] = df[col].astype("Int64")
|
95 |
+
|
96 |
+
sql_dtype = {
|
97 |
+
"DATA_INICIAL_TABLOIDE_PROMOCAO_ANUNCIO": DateTime(),
|
98 |
+
"DATA_FINAL_TABLOIDE_PROMOCAO_ANUNCIO": DateTime(),
|
99 |
+
"QUANTIDADE_DIAS_VALIDADE_TABLOIDE_PROMOCAO_ANUNCIO": Integer(),
|
100 |
+
"PRECO": Float(),
|
101 |
+
"PRECO_SEM_DESCONTO": Float(),
|
102 |
+
"TOTAL_PAGINAS_TABLOIDE_PROMOCAO_ANUNCIO": Integer(),
|
103 |
+
"MEDIDA_PRODUTO_SKU": Float(),
|
104 |
+
|
105 |
+
}
|
106 |
+
|
107 |
+
print("[DEBUG] Tipos das colunas:")
|
108 |
+
print(df.dtypes)
|
109 |
+
|
110 |
+
df.to_sql("base_dados_promocional_AUDITADA", engine, index=False, if_exists="replace", dtype=sql_dtype)
|
111 |
+
print("Banco de dados SQL criado com sucesso!")
|
112 |
+
return engine
|
113 |
|
114 |
def handle_csv_upload(file):
|
115 |
global engine, db, sql_agent
|