2014-04-12 45 views
0

我安装了MS ODBC Dirver for linuxpyodbc/django_pyodbc查询远程sqlsever数据库。我使用了原始的sql语句,因为我对DB有限制的权限。除了以下情况外,其他一切都很好:Simultanoeus http请求导致django pyodbc驱动程序错误

其中一个查询需要10秒钟才能完成。每次我试图让来自浏览器的另一个请求(将执行另一个查询语句),它完成之前,会出现这样的错误:

Environment: 


Request Method: GET 
Request URL: http://9.123.108.155:8000/wsus/disconnected/ 

Django Version: 1.6.2 
Python Version: 2.6.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'debug_toolbar') 
Installed Middleware: 
(u'debug_toolbar.middleware.DebugToolbarMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "/usr/lib/python2.6/site-packages/django_pyodbc/base.py" in _cursor 
    290.    if self.ops.sql_server_ver < 2005: 
File "/usr/lib/python2.6/site-packages/django_pyodbc/operations.py" in _get_sql_server_ver 
    32.   ver_code = cur.fetchone()[0] 
File "/usr/lib64/python2.6/site-packages/django/db/utils.py" in inner 
    106.     return func(*args, **kwargs) 
File "/usr/lib64/python2.6/site-packages/django/db/utils.py" in __exit__ 
    99.     six.reraise(dj_exc_type, dj_exc_value, traceback) 
File "/usr/lib64/python2.6/site-packages/django/db/utils.py" in inner 
    106.     return func(*args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django_pyodbc/base.py" in fetchone 
    458.   row = self.cursor.fetchone() 

Exception Type: Error at /wsus/disconnected/ 
Exception Value: ('IM001', '[IM001] [unixODBC][Driver Manager]Driver does not support this function (0) (SQLGetData)') 

事实上,当django_pyodbc试图获得的版本代码失败sqlserver数据库。但是这没有意义,因为如果没有其他查询正在进行,则不会发生此错误。我很确定DSN和这些声明是有效的。

意见代码:(我保存查询语句在另一个文件中)

def report(request,db,report): 
    cursor = connections[db].cursor() 
    rows = cursor.execute(statements[report]).fetchall() 
    cols = [ x[0] for x in cursor.description ] 
    context = { 'rows':rows, 'cols':cols } 
    return render(request, 'secport/report-ajax.html', context) 

DB设置:

'wsus':{ 
    'ENGINE':'django_pyodbc', 
    'NAME':'SUSDB', 
    'HOST':'xx.xx.xx.xx', 
    'USER':'user', 
    'PASSWORD':'password', 
    'OPTIONS': { 
     'driver': 'SQL Server Native Client 11.0', 
    }, 

如果我的理解是正确的,要求应在不同的线程中分离,而不是互相影响。为什么会发生这种情况?

回答

0

OK。原因很简单。只要用Apache或任何其他web服务器部署应用程序,这个错误就会消失。我想这是关于多进程。

相关问题