我通常使用Postgres来满足Django的数据库需求,但我最近开始在一家在Windows环境中使用MSSQL的公司。长话短说我不得不在settings.py中重写数据库属性。不幸的是,我不知道如何使用Pyodbc连接到SQL Server,他们正在运行Python 3.x所以我不能使用Django-Pyodbc。在尝试运行它时,我得到了: "未找到数据源名称且未指定默认驱动程序(0)(SQLDriverConnect)')"
这是我现在的db配置。我可能做错了但很难找到资源,因为大多数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
}
答案 0 :(得分:4)
老问题,但它可能对某人有所帮助。这些是我在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驱动程序。
答案 1 :(得分:2)
我在下面的堆栈中运气最好,而且我们只是一个Python 3商店:
假设您已将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或更低版本,则还需要包含'use_legacy_datetime': True,
,否则,它将使用新的SQL Server 2008+日期字段。如果您使用过时的驱动程序,它也会自动设置为true。祝你好运!
答案 2 :(得分:0)
同时有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'
},
}
}