我正试图使用Django-pyodbc azure包从Django应用程序连接到SQL Server后端。
我可以使用Django manage.py shell(ORM和pyodbc查询)和开发服务器(视图中的HttpResponse函数)连接并返回数据,但当我尝试使用Apache和mod_wsgi时,我收到错误:
('08S01', '[08S01] [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist (20009) (SQLDriverConnect)')
我使用的是Red Hat Enterprise Linux 7、Python 3.3.5、Pyodbc 3.0.7、Django 1.7、Apache 2.4.6、Mod_WSGI 4.4.5、SQL Server 2014、FreeTDS 0.91(不使用dsn)和Django Pyodbc Azure 1.2.0
Modwsgi.conf:
<VirtualHost *:80>
WSGIDaemonProcess xxx.xxx.xxx.xxx python-path=/path/to/mysite.com:/path/to/virtualenv/lib/python3.3/site-packages processes=2 threads=15
WSGIProcessGroup xxx.xxx.xxx.xxx
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
wsgi.py:
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
在设置中.py:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'hostname',
'NAME': 'dbname',
'USER': 'dbuser',
'PASSWORD': 'dbpassword',
'PORT': '1433',
'OPTIONS': {
'driver': 'FreeTDS',
'host_is_server': True,
'unicode_results': True,
'extra_params': 'tds_version=7.4'
}
}
}
当使用manage.py runserver时,我可以在浏览器中查看数据。
从翻译我也可以做:
In [1]: import pyodbc
In [2]: conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=servername;PORT=1433;DATABASE=dbname;UID=dbuser;PWD=dbpassword')
In [3]: cursor = conn.cursor()
In [4]: cursor.execute("select top 5 test_names from test_table;").fetchone()
Out[4]: ('John', )
但由于某种原因,当我尝试使用Apache时,最初的pyodbc数据库连接尝试失败了。
非常感谢在这方面的任何帮助。
你试过运行吗
sudo setsebool -P httpd_can_network_connect=1
在机器上?