Home > Enterprise >  login not working in Django after migrating to 3.2 getting error: django.db.utils.ProgrammingError
login not working in Django after migrating to 3.2 getting error: django.db.utils.ProgrammingError

Time:01-21

I recently migrated my Django version from 2.2 to 3.2 and login stopped working after that. In 2.2 it was working fine. It is giving an error:-

>     Traceback (most recent call last):
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/core/handlers/exception.py",
> line 47, in inner
>         response = get_response(request)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/core/handlers/base.py",
> line 181, in _get_response
>         response = wrapped_callback(request, *callback_args, **callback_kwargs)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/views/generic/base.py",
> line 70, in view
>         return self.dispatch(request, *args, **kwargs)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/utils/decorators.py",
> line 43, in _wrapper
>         return bound_method(*args, **kwargs)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/views/decorators/debug.py",
> line 89, in sensitive_post_parameters_wrapper
>         return view(request, *args, **kwargs)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 146, in dispatch
>         return super(LoginView, self).dispatch(request, *args, **kwargs)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 74, in dispatch
>         response = super(RedirectAuthenticatedUserMixin, self).dispatch(
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/views/generic/base.py",
> line 98, in dispatch
>         return handler(request, *args, **kwargs)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 102, in post
>         response = self.form_valid(form)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 159, in form_valid
>         return form.login(self.request, redirect_url=success_url)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/forms.py",
> line 196, in login
>         ret = perform_login(
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/utils.py",
> line 171, in perform_login
>         if not _has_verified_for_login(user, email) and signup:
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/utils.py",
> line 139, in _has_verified_for_login
>         ret = EmailAddress.objects.filter(user=user, verified=True).exists()
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/query.py",
> line 808, in exists
>         return self.query.has_results(using=self.db)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/sql/query.py", line 550, in has_results
>         return compiler.has_results()
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
> line 1145, in has_results
>         return bool(self.execute_sql(SINGLE))
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
> line 1175, in execute_sql
>         cursor.execute(sql, params)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 98, in execute
>         return super().execute(sql, params)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 66, in execute
>         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 75, in _execute_with_wrappers
>         return executor(sql, params, many, context)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 84, in _execute
>         return self.cursor.execute(sql, params)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/utils.py",
> line 90, in __exit__
>         raise dj_exc_value.with_traceback(traceback) from exc_value
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 84, in _execute
>         return self.cursor.execute(sql, params)
>       File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/sql_server/pyodbc/base.py",
> line 553, in execute
>         return self.cursor.execute(sql, params)
>     django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]An expression of
> non-boolean type specified in a context where a condition is expected,
> near ')'. (4145) (SQLExecDirectW)")
>     HTTP POST /accounts/login/ 500 [1.83, 127.0.0.1:44658]

This is what my urls.py looks like -

from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import RedirectView
from empereon.views import home, security_question, back_to_login
from django.conf.urls.static import static
from django.contrib.auth.decorators import login_required
from allauth.account.views import login
from . import views
from users.views import password_change
from .views import back_to_dashboard, handler404, handler500

from rest_framework_swagger.views import get_swagger_view

urlpatterns = [
    # allauth urls.
    url(r'^accounts/login', login),
]

Here are my Database Details that I am using

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'db name',
        'USER': 'db user',
        'PASSWORD': 'password',
        'HOST': 'ip',
        'PORT': 'port',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'host_is_server': True,
            'unicode_results': True,
            'extra_params': 'tds_version=7.0'
        },
    }
}

Can it be something related to different password hashing method or is there anything else I'd have to do after migrating to Django 3.2. Can anyone help me to figure out what is the issue ?

[UPDATE] I have posted solution below

CodePudding user response:

Is it the admin login that is having the problem or the client side

Try deleting the SQL file and make another migration

CodePudding user response:

[root cause]

django-mssql-backend only supports Django 2.2 and 3.0

[Solution]

  1. Install pyodbc 3.0 (or newer)
  2. Install library mssql-django

pip install mssql-django

  1. Set the ENGINE setting in the settings.py file used by your Django application or project to 'mssql':

    'ENGINE': 'mssql'

  •  Tags:  
  • Related