I am randomly getting "SystemError: <class 'pyodbc.Error'> returned a result with an error set" while performing sql query

Our sql query inside Django API perform joins and filtering over millions of records in sql server and takes long time to complete. Error occurs randomly in these api calls.
This seem to be the bug in pyodbc while decoding. This occurs at random in docker based linux environment.
Related issues - github issue 1014, github open issue 640

>     2023-02-06T08:23:54.206253807Z [2023-02-06 08:23:54 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:34) 2023-02-06T08:23:54.290137374Z
> Internal Server Error: /get_table_preview
> 2023-02-06T08:23:54.290184978Z Traceback (most recent call last):
> 2023-02-06T08:23:54.290193279Z   File
> "/usr/local/lib/python3.9/encodings/utf_16_le.py", line 15, in decode
> 2023-02-06T08:23:54.290200679Z     def decode(input, errors='strict'):
> 2023-02-06T08:23:54.290208080Z   File
> "/usr/local/lib/python3.9/site-packages/gunicorn/workers/base.py",
> line 203, in handle_abort 2023-02-06T08:23:54.290214281Z    
> sys.exit(1) 2023-02-06T08:23:54.290219781Z SystemExit: 1
> 2023-02-06T08:23:54.290225082Z  2023-02-06T08:23:54.290230382Z The
> above exception was the direct cause of the following exception:
> 2023-02-06T08:23:54.290235682Z  2023-02-06T08:23:54.290240883Z
> Traceback (most recent call last): 2023-02-06T08:23:54.290246183Z  
> File
> "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py",
> line 55, in inner 2023-02-06T08:23:54.290251684Z     response =
> get_response(request) 2023-02-06T08:23:54.290256884Z   File
> "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py",
> line 220, in _get_response 2023-02-06T08:23:54.290262485Z     response
> = response.render() 2023-02-06T08:23:54.290267685Z   File "/usr/local/lib/python3.9/site-packages/django/template/response.py",
> line 114, in render 2023-02-06T08:23:54.290273786Z     self.content =
> self.rendered_content 2023-02-06T08:23:54.290279286Z   File
> "/usr/local/lib/python3.9/site-packages/rest_framework/response.py",
> line 70, in rendered_content 2023-02-06T08:23:54.290284586Z     ret =
> renderer.render(self.data, accepted_media_type, context)
> 2023-02-06T08:23:54.290289787Z   File
> "/usr/local/lib/python3.9/site-packages/rest_framework/renderers.py",
> line 99, in render 2023-02-06T08:23:54.290296187Z     ret =
> json.dumps( 2023-02-06T08:23:54.290304288Z   File
> "/usr/local/lib/python3.9/site-packages/rest_framework/utils/json.py",
> line 25, in dumps 2023-02-06T08:23:54.290324390Z     return
> json.dumps(*args, **kwargs) 2023-02-06T08:23:54.290329990Z   File
> "/usr/local/lib/python3.9/json/__init__.py", line 234, in dumps
> 2023-02-06T08:23:54.290335191Z     return cls(
> 2023-02-06T08:23:54.290340091Z   File
> "/usr/local/lib/python3.9/json/encoder.py", line 199, in encode
> 2023-02-06T08:23:54.290345191Z     chunks = self.iterencode(o,
> _one_shot=True) 2023-02-06T08:23:54.290350192Z   File "/usr/local/lib/python3.9/json/encoder.py", line 257, in iterencode
> 2023-02-06T08:23:54.290355292Z     return _iterencode(o, 0)
> 2023-02-06T08:23:54.290360193Z   File
> "/usr/local/lib/python3.9/site-packages/rest_framework/utils/encoders.py",
> line 47, in default 2023-02-06T08:23:54.290365293Z     return
> tuple(obj) 2023-02-06T08:23:54.290370194Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/models/query.py",
> line 320, in __iter__ 2023-02-06T08:23:54.290375294Z    
> self._fetch_all() 2023-02-06T08:23:54.290380094Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/models/query.py",
> line 1507, in _fetch_all 2023-02-06T08:23:54.290385195Z    
> self._result_cache = list(self._iterable_class(self))
> 2023-02-06T08:23:54.290391195Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/models/query.py",
> line 130, in __iter__ 2023-02-06T08:23:54.290396396Z     for row in
> compiler.results_iter( 2023-02-06T08:23:54.290401196Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py",
> line 1312, in results_iter 2023-02-06T08:23:54.290406397Z     results
> = self.execute_sql( 2023-02-06T08:23:54.290411197Z   File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py",
> line 1361, in execute_sql 2023-02-06T08:23:54.290416397Z    
> cursor.execute(sql, params) 2023-02-06T08:23:54.290421198Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 103, in execute 2023-02-06T08:23:54.290426298Z     return
> super().execute(sql, params) 2023-02-06T08:23:54.290431199Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 67, in execute 2023-02-06T08:23:54.290436399Z     return
> self._execute_with_wrappers( 2023-02-06T08:23:54.290441399Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 80, in _execute_with_wrappers 2023-02-06T08:23:54.290446500Z    
> return executor(sql, params, many, context)
> 2023-02-06T08:23:54.290451500Z   File
> "/usr/local/lib/python3.9/site-packages/django/db/backends/utils.py",
> line 89, in _execute 2023-02-06T08:23:54.290456601Z     return
> self.cursor.execute(sql, params) 2023-02-06T08:23:54.290461501Z   File
> "/usr/local/lib/python3.9/site-packages/mssql/base.py", line 598, in
> execute 2023-02-06T08:23:54.290466602Z     return
> self.cursor.execute(sql, params) 2023-02-06T08:23:54.290471502Z
> SystemError: <class 'pyodbc.Error'> returned a result with an error
> set 2023-02-06T08:23:54.291507188Z [2023-02-06 08:23:54 +0000] [34]
> [INFO] Worker exiting (pid: 34) 2023-02-06T08:23:54.490548019Z
> [2023-02-06 08:23:54 +0000] [48] [INFO] Booting worker with pid: 48

How do I fix or catch this issue?

Back to Top