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',
},
如果我的理解是正确的,要求应在不同的线程中分离,而不是互相影响。为什么会发生这种情况?