Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Django与Sql Server结合使用_Django_Pyodbc_Django Pyodbc Azure - Fatal编程技术网

如何将Django与Sql Server结合使用

如何将Django与Sql Server结合使用,django,pyodbc,django-pyodbc-azure,Django,Pyodbc,Django Pyodbc Azure,我通常使用Postgres来满足Django的数据库需求,但最近我在一家在Windows环境下使用MSSQL的公司工作。长话短说,我不得不在settings.py中重写数据库属性。不幸的是,我不知道如何使用Pyodbc连接到SQL服务器,而他们正在运行Python3.x,所以我不能使用Django Pyodbc。在尝试运行时,我得到一个: “未找到数据源名称且未指定默认驱动程序(0)(SqlDriverConnection)” 这是我当前的数据库配置。我可能做错了什么,但很难找到资源,因为大多数

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

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


我很幸运地使用了以下堆栈,我们是Python 3专卖店:

  • FreeTDS 0.95
  • pyodbc 3.0.10
  • django pyodbc azure 1.8.3(假设django 1.8+)
假设您已将
odbc.ini
odbcinst.ini
freetds.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或更低版本,则还需要包含
“使用旧版日期时间”:True,
,否则,它将使用新的SQL Server 2008+日期字段。如果您使用的是过时的驱动程序,它也会自动设置为true。祝你好运

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

pyodbc==3.0.10
django-pyodbc-azure==1.10.0.1
然而,pip将下载的pyodbc对我来说不起作用。如建议的那样,转到该站点并根据您安装的Python 3.5版本下载:

  • pyodbc-3.0.10-cp35-none-win32.whl
    如果安装了32位Python 3.5
  • pyodbc-3.0.10-cp35-none-win\u 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 server的官方odbc驱动程序,并且正式(如果不是有点默契的话)支持django pyodbc azure项目。我强烈建议使用它,以及FreeTDS上的本机linux SQL Server ODBC驱动程序。

同时,还支持MSSQL,这就是我的设置(Django 3.0,Django MSSQL后端2.8.1)


@伊万:这些是独一无二的。正如我指出的,我正在运行Python3.x,所以Django Pyodbc是不可行的。谢谢,但是Pyodbc依赖于FreeTDS吗?是否有与Windows等效的软件?我相信FreeTDS只适用于unix环境。谢谢
'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,
 },
}
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'
        },
    }
}