import sqlite3 from .db_path import db_path def connect(slug): # timeout=10 : si une autre connexion tient un verrou d'écriture au même # instant (deux requêtes qui arrivent presque en même temps, ex. deux # onglets, ou le navigateur qui recharge plusieurs ressources), sqlite3 # réessaie pendant 10 secondes au lieu de lever immédiatement "database # is locked". Le mode WAL (Write-Ahead Logging) va plus loin : il permet # à des lectures de se faire PENDANT qu'une écriture est en cours # ailleurs, ce qui est la cause la plus fréquente de ce blocage avec le # serveur de développement Flask. conn = sqlite3.connect(db_path(slug), timeout=10) conn.row_factory = sqlite3.Row conn.execute("PRAGMA foreign_keys = ON") conn.execute("PRAGMA journal_mode = WAL") conn.execute("PRAGMA busy_timeout = 8000") return conn