【问题标题】:How to use Django with Sql Server如何将 Django 与 Sql Server 一起使用
【发布时间】:2015-12-22 14:56:52
【问题描述】:

我通常使用 Postgres 来满足我的 Django 数据库需求,但我最近开始在一家在 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
    }

【问题讨论】:

  • @Ivan 这些是独一无二的。正如我所指出的,我正在运行 Python 3.x,所以 Django-Pyodbc 不可行。

标签: django pyodbc django-pyodbc-azure


【解决方案1】:

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

pyodbc==3.0.10
django-pyodbc-azure==1.10.0.1

但是,pip 将下载的 pyodbc 对我不起作用。按照in this answer 的建议,访问此站点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,
 },
}

对于任何使用 linux 的人,MS 现在已经发布了用于 SQL 服务器的官方 odbc 驱动程序,并且正式(如果有点默许)支持 django-pyodbc-azure 项目。我强烈推荐使用它以及 FreeTDS 上的本机 linux SQL Server ODBC 驱动程序。

【讨论】:

    【解决方案2】:

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

    • FreeTDS 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;',
            },
        },
    }
    

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

    【讨论】:

    • 谢谢,但是 Pyodbc 是否依赖于 FreeTDS?是否有 Windows 等价物?我相信 FreeTDS 仅适用于 unix 环境。谢谢!
    【解决方案3】:

    同时有 django-mssql-backend 支持 MSSQL,这就是我的设置的样子(Django 3.0,django-mssql-backend 2.8.1)

    DATABASES = {
        'default': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': os.getenv('DB_NAME'),
            'USER': os.getenv('DB_USER'),
            'PASSWORD': os.getenv('DB_PASSWORD'),
            'HOST': os.getenv('DB_HOST'),
            'PORT': os.getenv('DB_PORT'),
            'TEST': {
                'NAME': os.getenv('DB_NAME'),
            },
            'OPTIONS': {
                'driver': 'ODBC Driver 17 for SQL Server',
                'extra_params': 'MARS_Connection=Yes'
            },
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 2019-03-23
      相关资源
      最近更新 更多