将Django与MSSQL服务器连接

8

我正在尝试将我的Django应用程序连接到SQL Server 2016。我尝试使用django-pyodbc,但它不支持Django 1.11。相反,我安装了django-mssql 1.8。当我尝试运行应用程序时,我遇到了这个错误。

TypeError was unhandled by user code
Message: 'NoneType' object is not callable

在manage.py中的execute_from_command_line(sys.argv)。以下是我从settings.py中获得的DATABASES:
DATABASES = {
    'default': {
        'ENGINE': 'sqlserver_ado',
        'NAME': 'TEST2',
        'HOST': 'PCNAME\SQLEXPRESS',
        'USER': '',
        'PASSWORD': '',
        'OPTIONS' : {
            'provider': 'SQLOLEDB',
            'use_mars': True,
        },
    }
}

我尝试了默认的和SQLOLEDB提供程序,但总是收到相同的错误。我也尝试过设置或不设置用户和密码,但错误仍然存在。我可以很好地连接到本地MySQL数据库。
我正在运行Windows 10,Visual Studio 2015,SQL Server Express 2016。
编辑:
这是从pip freeze的输出:
appdirs==1.4.3
Django==1.11
django-mssql==1.8
mysqlclient==1.3.10
packaging==16.8
pyodbc==4.0.16
pyparsing==2.2.0
pytz==2017.2
six==1.10.0

这是我的 requirements.txt 文件:

django==1.11
mysqlclient==1.3.10
django-mssql==1.8

你是否已经通过pip安装了mssql? - lch
是的,我通过pip安装了django-mssql,并将其添加到requirements.txt中。 - user1424311
5个回答

6
django-mssql文档中所述,最新版本仅支持Django 1.8,因此不能与Django 1.11一起使用。
你必须等待该软件包支持更高版本的Django才能升级。这是在非支持的数据库后端使用Django时的问题,你依赖于第三方软件包维护,而该软件包似乎难以及时更新以适应Django版本的变化。

5
使用 mssql-django,我们可以使用Windows身份验证SQL Server身份验证Django连接到MSSQL(SQL Server)。*我使用的是SQL Server 2019 Express
使用Windows身份验证,要使用mssql-djangoDjango连接到MSSQL,请将下面的代码设置到"settings.py"中。以下代码示例展示了DjangoMSSQL同一台Windows计算机(本地计算机)上的情况,"ENGINE"必须为"mssql""NAME"数据库名称"test""HOST"Windows计算机名称(设备名称)"DESKTOP-QVRCPTA"。*对于"PORT"保持空白,因为如果设置任何端口号,例如"2244""9877"甚至是"1433",这是MSSQL的默认端口号,会出现错误:
# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',                    # Must be "mssql"
        'NAME':'test',                       # DB name "test"
        'HOST':'DESKTOP-QVRCPTA\SQLEXPRESS', # <server>\<instance>
        'PORT':'',                           # Keep it blank
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

此外,"DESKTOP-QVRCPTA" 可以替换为 "localhost""USER""PASSWORD" 可以使用空字符串,并且可以删除 "PORT",如下所示,将 Django 连接到使用 Windows身份验证MSSQL

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',
        'NAME':'test',
        'USER':'',                     # Keep it blank
        'PASSWORD':'',                 # Keep it blank
        'HOST':'localhost\SQLEXPRESS', # "localhost" is also possible
        # 'PORT':'',                   # Can be removed
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

使用SQL Server身份验证,使用mssql-django连接MSSQL时,按照上述使用Windows身份验证的代码示例,在"settings.py"文件中设置"USER""PASSWORD"。*Windows身份验证SQL Server身份验证之间唯一的区别在于"USER""PASSWORD"

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',  
        'NAME':'test',           
        'USER':'john',                       # Username "john"
        'PASSWORD':'johnpw',                 # Password "johnpw"
        'HOST':'DESKTOP-QVRCPTA\SQLEXPRESS',
        'PORT':'',                           
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

此外,与使用Windows身份验证的代码相同,可以使用下面所示的方式将"DESKTOP-QVRCPTA"替换为"localhost"并删除"PORT",以便使用SQL Server身份验证Django连接到MSSQL

# "settings.py"

DATABASES = {
    'default':{
        'ENGINE':'mssql',
        'NAME':'test',
        'USER':'john',        
        'PASSWORD':'johnpw',
        'HOST':'localhost\SQLEXPRESS', # "localhost" is also possible
        # 'PORT':'',                   # Can be removed   
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

接下来,安装最新版本的mssql-django软件包

pip install mssql-django

接下来,进行数据迁移和更新:

python manage.py makemigrations && python manage.py migrate

接着,创建超级用户:

python manage.py createsuperuser

现在,我们可以使用Windows身份验证SQL Server身份验证Django连接到MSSQL,然后为"test"数据库创建表格。


4

根据官方django文档(目前为django 3.1),应使用django-mssql-backendDjango-MSSQL-backend django数据库适配器是django-pyodbc-azure的一个分支,其具有以下功能:

  • 支持Django 2.2, 3.0
  • 支持Microsoft SQL Server 2008/2008R2、2012、2014、2016、2017、2019
  • 与Micosoft ODBC Driver for SQL Server、SQL Server Native Client和FreeTDS ODBC驱动程序兼容

其他解决方案,如2020年11月的django-pyodbc-azuredjango-sqlserverdjango-mssql似乎已经过时。


2
您可以使用django-pyodbc-azure,因为它支持当前版本的django 2.0。安装后,您需要像下面这样在设置文件中进行编辑:
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': DB_NAME,
        'USER': USER,
        'PASSWORD': PASSWORD,
        'HOST': HOST,
        'PORT': PORT,
        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
            'unicode_results': True,

        },
    }
}

如果您将TDS库安装为驱动程序,则您的驱动程序将是'driver':'Free TDS'。这里13是默认版本。如果您安装的版本与此不同,则请使用该版本号而不是13。


1
请查看此链接。首先需要安装mssql-django包,数据库配置应该如下:
DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "Todo",
        "USER": "",
        "PASSWORD": "",
        "HOST": "127.0.0.1",
        "PORT": "1433",
        "OPTIONS": {"driver": "ODBC Driver 17 for SQL Server",
                    },
    },
}

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