Gérer la version minimale de sqllite requise pour le dev #6169
Labels
C-Back
Concerne le back-end Django
C-DevelopmentEnv
Amélioration de l'environnement de dev
S-BUG
Corrige un problème
Description du bug
La PR #6156 exige implicitement une version de sqlite >= 3.23, car elle utilise les alias TRUE et FALSE qui n'existaient pas auparavant (voir la documentation associée).
Cette dépendance de version n'est spécifiée nul part et n'est un soucis que pour le dev sur des systèmes anciens car Python semble utiliser la version du système.
Aperçu d'un état des lieux rapide par @Situphen :
Comment reproduire ?
Avoir un vieux système avec sqlite<=3.22 et constater que la page d'accueil (entre autre) plante avec une OperationalError à partir de la PR #6156.
Comportement attendu
Quoi qu'il en soit, on devrait avoir une vérification à l'installation de l'environnement de dev la version de sqlite utilisée par Python. Il est possible de le faire manuellement (voir ci-dessous), mais l'intégrer dans le processus d'installation serait évidemment un plus pour pouvoir alerter en cas de version trop ancienne.
Si on impose une version relativement récente de sqlite, il faut garder en tête que ça rajoute une contrainte sur l'âge des systèmes utilisés pour le dév, à moins de proposer des setups à base de conteneurs (qui posent d'autres questions...).
Pour éviter ces contraintes, il est possible d'utiliser une syntaxe compatible avec sqlite pour le dev et la BDD de production, mais ça peut coûter en lisibilité. À voir quel compromis on veut.
Une dernière solution serait d'éliminer l'usage de SQL brut à travers
extra()
, si possible. Django a une politique assez claire de se débarasser à terme de cette fonction en faisant évoluer les fonctionnalités des autres fonctions de l'API QuerySet pour la rendre inutile. Ils collectent les cas d'usages deextra()
pour s'assurer que tous les cas d'usages peuvent être couverts autrement.The text was updated successfully, but these errors were encountered: