Closed Situphen closed 4 years ago
Je n'arrive pas à reproduire.
Je viens de vérifier sur upstream/dev
à jour après avoir bien mis à jour les paquets Python et Node JS et j'ai toujours le soucis. Que ce soit sur un tutoriel installé avec les données factices ou avec le tutoriel Arduino.
Caractéristiques techniques
import sqlite3
puis sqlite3.sqlite_version
)Trace complète
ERROR:django.request:Internal Server Error: /api/contenus/exports/31/
Traceback (most recent call last):
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: near "(": syntax error
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
raise exc
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/rest_framework/generics.py", line 199, in get
return self.list(request, *args, **kwargs)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/rest_framework/mixins.py", line 38, in list
queryset = self.filter_queryset(self.get_queryset())
File "/home/situphen/Code/zds-site/zds/tutorialv2/api/views.py", line 172, in get_queryset
prefetch_related_objects(exports, 'published_object')
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/models/query.py", line 1546, in prefetch_related_objects
if not model_instances:
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/models/query.py", line 1391, in __bool__
self._fetch_all()
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/models/query.py", line 1382, in _fetch_all
self._result_cache = list(self.iterator())
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/models/query.py", line 1405, in iterator
query = iter(self.query)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/models/sql/query.py", line 102, in __iter__
self._execute_query()
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/models/sql/query.py", line 136, in _execute_query
self.cursor.execute(self.sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/debug_toolbar/panels/sql/tracking.py", line 198, in execute
return self._record(self.cursor.execute, sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/debug_toolbar/panels/sql/tracking.py", line 133, in _record
return method(sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 99, in execute
return super().execute(sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/situphen/Code/zds-site/zdsenv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: near "(": syntax error
SQLite 3.22.0
Les fonctions de fenêtrage (window functions), nécessaires pour la requête récupérant les derniers exports, ne sont disponibles que depuis SQLite 3.25.0 (septembre 2018). Ta version est trop vieille (janvier 2018).
Peut-être faudrait-il spécifier la version minimale de SQLite quelque part.
Peut-être faudrait-il spécifier la version minimale de SQLite quelque part.
Oui ce serait bien en effet ! Étant donné que SQLite vient avec Python dans la majorité des cas, ça fait passer la version minimale de Python à 3.7.4. Enfin en soit ce n'est pas gênant de rester sur du Python 3.6 sauf ce petit soucis.
Le site reste fonctionnel sauf pour ça, mais en effet il faudrait le documenter quelque part, histoire que ça ne surprenne pas trop ^^
Il n'y aurait pas moyen d’exécuter cette requête autrement pour le cas ou on rentre dans le except
avec un warning dans la console django qui dit qu'il vaudrait mieux update sa version de python si on veut avoir de meilleur perf ?
Difficilement, ou alors il faudrait récupérer tous les enregistrements et faire le tri en Python
La question que je me pose c'est — est-ce pertinent pour un si petit apport (les gens en version de développement avec une vieille version de SQLite) ? Si la réponse est oui, je peux me charger de faire une version alternative moins performante.
est-ce pertinent pour un si petit apport (les gens en version de développement avec une vieille version de SQLite) ?
Personnellement je ne pense pas, tant qu'il y a assez de développeurs avec la bonne version de Python/SQLite pour faire la QA de ce qui touche à cette fonctionnalité.
Je propose de pour le moment, fermer de ticket, mais de le rouvrir si ça venait à devenir bloquant.
Donc surtout, n'hésitez pas. Mais je n'ai que peu de craintes, vu que SQLite 3.25.0 / Python 3.7.4 sont déjà vieux — tout le monde, y compris les gens sur des systèmes à versions figées, devrait l'avoir assez rapidement, si ce n'est pas déjà le cas.
Impossible de charger la liste des exports avec SQLite
Reproduction
Trace correspondante dans la console