0
我安裝了MS ODBC Dirver for linux
和pyodbc/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',
},
如果我的理解是正確的,要求應在不同的線程中分離,而不是互相影響。爲什麼會發生這種情況?