Files
scrap/MIGRATION_GUIDE.md
Gilles Soulier d0b73b9319 codex2
2026-01-14 21:54:55 +01:00

2.0 KiB

Migration JSON -> Database (Phase 2)

Guide pour migrer des resultats JSON existants (Phase 1) vers PostgreSQL (Phase 2).

Prerequis

  • PostgreSQL + Redis operationnels
  • Dependencies installees (pip install -e .)
  • Migration DB appliquee (alembic upgrade head)

1) Verifier la configuration

Copier l'exemple et ajuster les identifiants si besoin:

cp .env.example .env

Verifier la configuration:

pricewatch doctor

2) Initialiser la base

Si la base n'est pas encore initialisee:

pricewatch upgrade

Verifier les tables:

psql -h localhost -U pricewatch pricewatch
\dt

3) Migrer un fichier JSON existant

Le JSON de Phase 1 est deja conforme au schema ProductSnapshot. Il suffit de le recharger puis de repasser par la persistence.

Option A: Script rapide

Creer un petit script ad-hoc (exemple):

from pricewatch.app.core.io import read_json_results
from pricewatch.app.scraping.pipeline import ScrapingPipeline

snapshots = read_json_results("scraped_store.json")

pipeline = ScrapingPipeline()
for snapshot in snapshots:
    pipeline.process_snapshot(snapshot, save_to_db=True)

Execution:

python migrate_json.py

Option B: Enqueue via worker

Si vous voulez traiter les snapshots via worker, utilisez une boucle qui enqueue scrape_product avec l'URL du snapshot, puis laissez le worker tourner. Cela garantira un refresh complet (fetch + parse + DB) au lieu d'inserer uniquement le JSON.

4) Verifier les donnees

psql -h localhost -U pricewatch pricewatch
SELECT COUNT(*) FROM products;
SELECT COUNT(*) FROM price_history;
SELECT COUNT(*) FROM scraping_logs;

5) Notes importantes

  • Si reference est absente, la persistence du produit est ignoree, mais un ScrapingLog est cree.
  • La contrainte d'unicite (source, reference) evite les doublons.
  • Les images/specs sont synchronises par ajout/ups ert (pas de suppression automatique).
  • En cas d'erreur DB, le snapshot est conserve et une note est ajoutee dans snapshot.debug.notes.