设置django-mssql存在问题

4

我正在安装django-mssql在Win Server 2008 R2上,但是遇到了一些问题。我已经完成所有安装步骤,然而,django-mssql的wiki上指出要将设置文件配置类似于:

DATABASES = {
'default': {
    'NAME': 'my_database',
    'ENGINE': 'sqlserver_ado',
    'HOST': 'dbserver\\ss2008',
    'USER': '',
    'PASSWORD': '',
    'OPTIONS' : {
        'provider': 'SQLOLEDB',
        'use_mars': True,
    },
   }
}

当我从我的站点目录中运行时:

 python manage.py syncdb

我收到一个错误提示,说它不是可用的数据库后端。当我安装django-mssql时,它似乎在这里安装了后端\site-packages\django_mssql-1.0.1-py2.7.egg\sqlserver_ado,这需要复制到site-packages\django\db\backends吗?
如果我设置我的设置为相同的设置,我会得到相同的错误提示:
DATABASES = {
'default': {
    'NAME': 'my_database',
    'ENGINE': 'django_mssql-1.0.1-py2.7.egg.sqlserver_ado',
    'HOST': 'dbserver\\ss2008',
    'USER': '',
    'PASSWORD': '',
    'OPTIONS' : {
        'provider': 'SQLOLEDB',
        'use_mars': True,
    },
   }
}

在设置后端时,我有什么遗漏吗?这是我第一次使用django,但我没有在文档中看到设置不同后端的内容,django-mssql维基或问题也似乎没有任何相关信息。

另外,如果有其他文档可以帮助,请告诉我。

编辑:django应用程序正在运行Ubuntu服务器上。


我建议不要把外部文件复制到你的Django目录中,这不是个好主意。但是你可能需要在设置文件中的某个位置导入后端。也许可以尝试使用 from mssql import * - j_syk
当你决定升级到Django 1.4时,你需要更新到django-mssql v1.1。pip install django-mssql==1.1 - Manfre
谢谢,很高兴他们更新了它以适用于1.4版本。 - rjbez
6个回答

6

达斯汀提到确保从命令行窗口中“import sqlserver_ado”,这让我在我的Django 1.8.1、Python 3.5 Win32系统上安装了pywin32后走上了正确的道路。

剧透警告 这只是让我的Django实例运行而没有错误。 我还没有测试ADO连接。

我收到的第一个错误消息是:

No module named 'django.db.backends.util'

我发现有一个名为django.db.backends.utils的文件,于是我将其复制并重命名为django.db.backends.util(去掉's'),错误信息消失了!希望这么做并不会带来太多问题,于是我继续了解决问题。接下来出现的错误信息如下:
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\sqlserver_ado\base.py", line 7, in <module>
from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseValidation, BaseDatabaseClient 
ImportError: cannot import name 'BaseDatabaseWrapper'

我把 base.py 文件中的第 7 行修改为:

#from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseValidation, BaseDatabaseClient
from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.backends.base.features import BaseDatabaseFeatures
from django.db.backends.base.validation import BaseDatabaseValidation
from django.db.backends.base.client import BaseDatabaseClient

是的,这样就可以注释掉错误的代码并添加四行新代码了。 但是我遇到了这个错误:

  File "C:\Program Files (x86)\Python35-32\lib\site-packages\sqlserver_ado\base.py", line 18, in <module>
from .introspection import DatabaseIntrospection

文件 "C:\Program Files (x86)\Python35-32\lib\site-packages\sqlserver_ado\introspection.py", 第3行报错:

无法导入 'BaseDatabaseIntrospection'。

因此,我将第3行修改为:

from django.db.backends.base.introspection import BaseDatabaseIntrospection

以 creation.py 为例,类似的操作如下:
from django.db.backends.base.creation import BaseDatabaseCreation

针对operations.py文件:

from django.db.backends.base.operations import BaseDatabaseOperations

针对 schema.py:

from django.utils.log import getLogger

希望这能帮助到某位读者。同时,希望ADO模块确实能连接到某些东西。
- Sean

刚刚遇到了完全相同的问题。我刚安装了Django、Pywin32和Django-mssql,但是我在第一步就失败了。这是一个bug吗?我正在使用Python 2.7。 - Danny Cullen
2
from logging import getLogger 完成了最后一部分的工作。 - Danny Cullen

5
你需要确保能够在Python shell中导入"sqlserver_ado"。 将文件夹sqlserver_ado放在你的PATH路径下,我把它放在了 \site-packages\ 中。 查看README.txt。 引擎需要设置为"sqlserver_ado",类似于设置示例页面中所做的设置。

这看起来可以了……我手头的文档没有那个细节。谢谢。 - rjbez
另外需要考虑的一件事是更新pywin32。请参见https://dev59.com/Um855IYBdhLWcg3wynmC - Dan Doyon

3

截至2019年:

我无法让Django MSSQL工作。

我转而使用django-pyodbc-azure,效果很好。

安装:

pip install django-pyodbc-azure

设置:

'ENGINE': 'sql_server.pyodbc'

1
这里使用的是djang<=2.1。 - emanuel sanga
我正在使用Django 3.1.7,并安装django-pyodbc-azure导致其降级到Django 2.1.15,从而使其他代码崩溃。我不得不使用"pip install Django=3.1.7"来恢复。 - andyabel

1

我尝试让django_pyodbc工作,但是失败了。我遇到了以下错误:

django.core.exceptions.ImproperlyConfigured: 'django_pyodbc' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
    u'base', u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: cannot import name BaseDatabaseWrapper

我被引导到这篇文章作为解决方案,所以我也会在这里发布我的答案。我将django从1.8降级到1.6,现在django_pyodbc作为数据库后端可以正常工作。

1

1
抱歉,之前没有提到,但是Django应用程序正在Ubuntu上运行。因此,PyWin32无法安装。 - rjbez

0
根据https://github.com/lionheart/django-pyodbc/pull/96,django_pyodbc现在应该可以与Django 1.8一起使用。因此,对于那些需要SQL Server 2008 R2支持的人来说,这似乎是一个很好的替代方案,可以取代django-mssql。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接