2014-04-12 46 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服務器部署應用程序,這個錯誤就會消失。我想這是關於多進程。

相關問題