迁移到3.2后,登录名在Django中无法工作,出现错误:Django.db.utils.ProgrammingErro



我最近将Django版本从2.2迁移到3.2,之后登录就停止了。在2.2中,它运行良好。它给出了一个错误:-

>     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]

这就是我的urls.py的样子-

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),
]

这是我正在使用的数据库详细信息

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'
},
}
}

它可能与不同的密码哈希方法有关吗?或者在迁移到Django 3.2后,我还需要做其他事情吗。有人能帮我弄清楚问题出在哪里吗?

[更新]我已经在下面发布了解决方案

[根本原因]

django-mssql后端仅支持django 2.2和3.0

【解决方案】

  1. 安装pyodbc 3.0(或更新版本(
  2. 安装库mssql-django

pip安装mssql-django

  1. 将Django应用程序或项目使用的settings.py文件中的ENGINE设置设置为'mssql':

    "引擎":"mssql">

最新更新