53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
import os
|
|
import pickle
|
|
import pandas as pd
|
|
from sqlalchemy import create_engine, Column, Integer, String, Table, MetaData, inspect
|
|
from sqlalchemy.dialects.mysql import LONGTEXT
|
|
|
|
DB_USER = "laravel_user"
|
|
DB_PWD = "P4ssw0rd.96!"
|
|
DB_HOST = "127.0.0.1"
|
|
DB_DB = "laravel_db"
|
|
OUT_PATH = "estratti_serializzati"
|
|
|
|
def safe_columns(df):
|
|
# Rinomina colonna "id" o "ID" (case-insensitive) in "id_csv"
|
|
df.columns = [col if col.lower() != "id" else "id_csv" for col in df.columns]
|
|
return df
|
|
|
|
engine = create_engine(f"mysql+pymysql://{DB_USER}:{DB_PWD}@{DB_HOST}/{DB_DB}?charset=utf8mb4")
|
|
metadata = MetaData()
|
|
|
|
def ensure_table(table_name, columns):
|
|
insp = inspect(engine)
|
|
if insp.has_table(table_name):
|
|
print(f"[INFO] Tabella esistente: {table_name}")
|
|
return
|
|
cols = [Column('id', Integer, primary_key=True, autoincrement=True)]
|
|
for col in columns:
|
|
if col == "id":
|
|
continue
|
|
cols.append(Column(col, LONGTEXT))
|
|
table = Table(
|
|
table_name, metadata, *cols,
|
|
mysql_engine='InnoDB',
|
|
mysql_row_format='DYNAMIC'
|
|
)
|
|
table.create(engine)
|
|
print(f"[OK] Tabella creata: {table_name}")
|
|
|
|
def import_table(tablename, df):
|
|
df = safe_columns(df)
|
|
ensure_table(tablename, df.columns)
|
|
df.to_sql(tablename, engine, if_exists='append', index=False, method='multi', chunksize=1000)
|
|
print(f"[OK] Importati {len(df)} record in {tablename}")
|
|
|
|
def main():
|
|
for fname in os.listdir(OUT_PATH):
|
|
if fname.endswith(".pkl") and fname != "all_tables.pkl":
|
|
tablename = fname.replace(".pkl", "")
|
|
df = pd.read_pickle(os.path.join(OUT_PATH, fname))
|
|
import_table(tablename, df)
|
|
|
|
if __name__ == "__main__":
|
|
main() |