首页 > 解决方案 > 无法将 Django 连接到 SQL 服务器

问题描述

这是我在这里的第一个帖子,如果有问题请见谅。

我正在 Django 中创建一个 CRM sorta 应用程序,并尝试使用 pyodbc 连接到 MSSQL 数据库。我设法连接,Django 甚至创建了一些表 dbo.django_migrations 和 dbo.django_content_type (这是空白的)。但是当我运行时,我得到了很多错误:

Traceback (most recent call last):
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\views\decorators\debug.py", line 89, in sensitive_post_parameters_wrapper
    return view(request, *args, **kwargs)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\allauth\account\views.py", line 146, in dispatch
    return super(LoginView, self).dispatch(request, *args, **kwargs)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\allauth\account\views.py", line 69, in dispatch
    if request.user.is_authenticated and app_settings.AUTHENTICATED_LOGIN_REDIRECTS:
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\utils\functional.py", line 246, in inner
    self._setup()
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\utils\functional.py", line 382, in _setup
    self._wrapped = self._setupfunc()
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\auth\middleware.py", line 23, in <lambda>
    request.user = SimpleLazyObject(lambda: get_user(request))
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\auth\middleware.py", line 11, in get_user
    request._cached_user = auth.get_user(request)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\auth\__init__.py", line 177, in get_user
    user_id = _get_user_session_key(request)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\auth\__init__.py", line 60, in _get_user_session_key
    return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\sessions\backends\base.py", line 65, in __getitem__
    return self._session[key]
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\sessions\backends\base.py", line 238, in _get_session
    self._session_cache = self.load()
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\sessions\backends\db.py", line 43, in load
    s = self._get_session_from_db()
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\contrib\sessions\backends\db.py", line 32, in _get_session_from_db
    return self.model.objects.get(
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\models\query.py", line 431, in get
    num = len(clone)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\models\query.py", line 262, in __len__
    self._fetch_all()
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\models\query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\models\query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1169, in execute_sql
    cursor.execute(sql, params)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\backends\utils.py", line 98, in execute
    return super().execute(sql, params)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\backends\utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "c:\Users\thardt\Documents\Web-Development\employeeweb\venv\lib\site-packages\sql_server\pyodbc\base.py", line 553, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'django_session'. (208) (SQLExecDirectW); [42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180)")
[13/Apr/2021 16:36:31] "GET / HTTP/1.1" 500 203174

我真的不知道我做错了什么。我已经阅读了无数有类似问题的线程,但似乎没有任何帮助。

我的设置.py:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'Employee_Database_Test',
        'USER': 'xxxx',
        'PASSWORD': 'xxxx', 
        'HOST': 'ss-sql-02',
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    },
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
}

标签: pythonsql-serverdjangopyodbc

解决方案


所以,经过一番摸索......我已经将 Django 从 3.2 降级到 3.0,将 Allauth 降级到 0.42.0。运行所有迁移,神奇地一切正常。我不确定问题的原因是什么,老实说,可能只是 Django 3.2 或 Allauth 和 pyobdc 之间的一些不兼容?


推荐阅读