如何在Sql Server中使用Django

Wil*_*ley 5 django pyodbc django-pyodbc-azure

我通常在Django中使用Postgres来满足我的数据库需求,但是最近我在一家在Windows环境中使用MSSQL的公司开始工作。长话短说,我不得不重写settings.py中的数据库属性。不幸的是,我不知道如何使用Pyodbc连接到SQL Server,并且它们正在运行Python 3.x,所以我不能使用Django-Pyodbc。尝试运行它时,我得到一个:“找不到数据源名称,并且未指定默认驱动程序(0)(SQLDriverConnect)')”

这是我目前的数据库配置。我可能做错了事,但是很难找到资源,因为大多数Django + Sql Server结果要么使用FreeTDS要么使用Django-Pyodbc(都不是选项)。

'default': {
    'ENGINE': 'sql_server.pyodbc',
    'NAME': 'db_name_on_server',
    'USER': 'my_acct',
    'PASSWORD': 'nope',
    'HOST': 'x.x.x.x',
    'PORT': '1433',
    'OPTIONS': {  # Options are not edited
        'driver': 'SQL Server',  # What it displays as on odbc admin   
        'dsn': 'System DSN',  # What it displays as on odbc admin
        'use_legacy_datetime': False
    }
Run Code Online (Sandbox Code Playgroud)

Die*_*cic 5

旧问题,但这可能对某人有帮助。这些是我在Windows中用于连接到SQL Server的设置。正如@flipperpa所说,我也使用django-pyodbc-azure

pyodbc==3.0.10
django-pyodbc-azure==1.10.0.1
Run Code Online (Sandbox Code Playgroud)

但是,pip将下载的pyodbc对我不起作用。按照此答案的建议,转到此站点http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyodbc并根据您安装的Python 3.5的版本进行下载:

  • pyodbc?3.0.10?cp35?none?win32.whl 如果您安装了32位Python 3.5
  • pyodbc?3.0.10?cp35?none?win_amd64.whl 如果您安装了64位Python 3.5

然后使用以下设置进行连接:

'default': {
 'ENGINE': 'sql_server.pyodbc',
 'HOST': "localhost",
 'USER': "--user name--",
 'PASSWORD': "--password--",
 'NAME': "--database name--",
 'PORT': 1433,
 'OPTIONS': {
      'driver' : 'SQL Server Native Client 11.0',
      'MARS_Connection' : True,
      'driver_supports_utf8' : True,
 },
}
Run Code Online (Sandbox Code Playgroud)

对于使用Linux的任何人,MS现在都已经发布了用于SQL Server的官方odbc驱动程序,并且正式(如果不是默契的话)支持django-pyodbc-azure项目。我强烈建议使用它以及FreeTDS上的本机linux SQL Server ODBC驱动程序。


Fli*_*rPA 2

我在以下堆栈中获得了最好的运气,并且我们是一家专门的 Python 3 商店:

  • 免费TDS 0.95
  • pyodbc 3.0.10
  • django-pyodbc-azure 1.8.3(假设 Django 1.8+)

假设您已将odbc.iniodbcinst.inifreetds.conf全部平方,以下是适合我的设置示例。其中一些取决于您是否使用 SQL Server 2008+:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'yourserver.com',
        'PORT': '1433',
        'NAME': 'your_db',
        'USER': 'your_user',
        'PASSWORD': 'your_pw',
        'AUTOCOMMIT': True,
        'OPTIONS': {
            'driver': 'FreeTDS',
            'unicode_results': True,
            'host_is_server': True,
            'extra_params': 'tds_version=7.2;',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

如果您运行的是 SQL Server 2005 或更低版本,您还需要包含在内'use_legacy_datetime': True,,否则,它将使用新的 SQL Server 2008+ 日期字段。如果您使用过时的驱动程序,它也会自动设置为 true。祝你好运!