AI är väl lämpad för formatkonverteringar (CSV ↔ JSON ↔ SQL) och migreringsskript eftersom transformationsreglerna är mekaniska. Tricket är att ge det tillräckligt med sammanhang för att vara korrekt och säkert: scheman, en exempelrad och explicita säkerhetskrav.
Hur du ställer frågan
- Ge käll- och målschemat — kolumnnamn, typer, nullbarhet.
- Inkludera en verklig exempelrad så att den ser den faktiska formen och kantfall (citationstecken, nulls, datum).
- Kräv att det är idempotent och validerat — att köra igen bör inte duplicera eller skada data; dåliga rader bör fångas, inte tyst infogas.
- Gör alltid ett torrt körningstest på en kopia av data innan du rör produktionen. Inspektera utmatningen först.
Exempel: CSV → SQL inserts
import csv
# Source CSV: id,email,signup_date (signup_date may be blank)
# Target table: users(id INT, email TEXT NOT NULL, signup_date DATE NULL)
def csv_to_sql(path: str) -> list[str]:
statements = []
with open(path, newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
email = row["email"].strip()
if not email: # validate: skip invalid rows, don't insert garbage
continue
date = row["signup_date"].strip() or None
email_sql = email.replace("'", "''") # escape quotes to avoid broken SQL / injection
date_sql = f"'{date}'" if date else "NULL"
# ON CONFLICT makes it idempotent: re-running won't create duplicates
statements.append(
f"INSERT INTO users (id, email, signup_date) "
f"VALUES ({int(row['id'])}, '{email_sql}', {date_sql}) "
f"ON CONFLICT (id) DO NOTHING;"
)
return statements
Kommentarerna markerar de delar som är viktiga: validering (hoppa över tomma e-postadresser), escaping (citationstecken) och idempotens (ON CONFLICT DO NOTHING). Be AI att inkludera alla tre — det är saker som ett naivt skript glömmer.
Varför det spelar roll
Datamigreringar är högriskerade och ofta engångshändelser: ett skript som dubbelfogar eller släpper rader kan vara dyrt att ångra. AI påskyndar skrivandet av konverteringen, men säkerhetegenskaperna — idempotens, validering och ett torrt test på en kopia — är icke-förhandlingsbara. Behandla det genererade skriptet som ett utkast som du måste läsa och testa, aldrig som något du kör blint mot verklig data.
