2.0 KiB
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
referenceest absente, la persistence du produit est ignoree, mais unScrapingLogest 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.