""" Migrazione one-shot: tabValutazioniExtraGemma da Access → linker.db SQLite. """ import sqlite3 from pathlib import Path ACCDB = r"I:\SOFTWARE\ProcedureICR\ICRmonitor\MonitorLinker\db_warehouse.accdb" LINKER_DB = Path(__file__).parent / "sync_db" / "linker.db" try: import pyodbc except ImportError: raise SystemExit("pyodbc non disponibile.") print(f"Apertura Access: {ACCDB}") acc = pyodbc.connect( rf"Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};Dbq={ACCDB};" ) cur = acc.cursor() cur.execute("SELECT * FROM tabValutazioniExtraGemma") cols = [d[0] for d in cur.description] rows = cur.fetchall() acc.close() print(f"Letti {len(rows)} record da Access | Colonne: {cols}") sq = sqlite3.connect(str(LINKER_DB)) # Ricrea la tabella con lo schema aggiornato (drop se esiste già dalla precedente run) sq.execute("DROP TABLE IF EXISTS tabValutazioniExtraGemma") sq.execute(""" CREATE TABLE tabValutazioniExtraGemma ( IMDB VARCHAR(255) NOT NULL, Ambito VARCHAR(255), RDA VARCHAR(255), C5 VARCHAR(255), I1 VARCHAR(255), R4 VARCHAR(255), LA5 VARCHAR(255), I2 VARCHAR(255), IRIS VARCHAR(255), TOPCRIME VARCHAR(255), FOCUS VARCHAR(255), C20 VARCHAR(255), CINE34 VARCHAR(255), TWENTYSEVEN VARCHAR(255), SintesiPropostaGiro VARCHAR(255), NoIcrMotivazione VARCHAR(255), NoIcr INTEGER DEFAULT 0, data_creazione VARCHAR(255), PRIMARY KEY (IMDB, Ambito) ) """) inseriti = 0 for row in rows: rec = dict(zip(cols, row)) imdb = str(rec.get('IMDB') or '').strip() ambito = rec.get('Ambito') # None se NULL in Access dc = rec.get('data_creazione') data_creazione = dc.isoformat(sep=' ') if hasattr(dc, 'isoformat') else (str(dc) if dc else None) sq.execute(""" INSERT OR REPLACE INTO tabValutazioniExtraGemma (IMDB, Ambito, RDA, C5, I1, R4, LA5, I2, IRIS, TOPCRIME, FOCUS, C20, CINE34, TWENTYSEVEN, SintesiPropostaGiro, NoIcrMotivazione, NoIcr, data_creazione) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) """, ( imdb, ambito, None, # RDA — non presente in Access rec.get('C5'), rec.get('I1'), rec.get('R4'), rec.get('LA5'), rec.get('I2'), rec.get('IRIS'), rec.get('TOPCRIME'), rec.get('FOCUS'), rec.get('C20'), rec.get('CINE34'), rec.get('TWENTYSEVEN'), rec.get('SintesiPropostaGiro'), rec.get('NoIcrMotivazione'), 1 if rec.get('NoIcr') else 0, data_creazione, )) inseriti += 1 sq.commit() sq.close() print(f"Inseriti: {inseriti} (tutti i record)") print("Migrazione completata.")