Django SQL Server 错误:"Cannot create new connection because in manual or distributed transaction mode



我在从django查询SQL Server时遇到了一些奇怪的问题。

当我在一个请求中查询数据库两次时,在某些情况下会出现错误。也就是说,当第一次数据库查询返回大量数据时,我们在第二次查询数据库时会出现错误。

详细信息:

我们正在使用Django的Microsoft SQL Server后端(https://bitbucket.org/Manfre/django-mssql/src)在windows上运行。

我们希望允许用户通过表单过滤某些表("活动")中的数据,将其显示在网站的表上,然后在地图上显示另一个表("框架")的相关数据。

class Frames(models.Model):
...
class Activity(models.Model):
frame_from = models.ForeignKey(Frames, ...)
...

问题是:当我们想从活动中过滤更多的数据(比如说200行x 6列)时,我们不能在表Frames上的同一请求中进行其他查询(在Django settings.py中打开了MARS):

result = Aktywnosci.objects.filter(qset1) 

总是可以的,但是

path = Frames.objects.filter(qset2) 

当上一个查询返回大量数据时,会引发OLE DB错误:

"Microsoft OLE DB Provider for SQL Server"错误:无法创建新连接,因为在手动或分布式事务模式下

PS。来自settings.py:的数据库设置

# Database for this installation. 
DATABASES = {
'default':{
    'ENGINE': 'django.db.backends.sqlserver_ado', 
    'NAME': '***',                      
    'USER': '***',                      
    'PASSWORD': '***',                  
    'HOST': '***',                      
    'PORT': '',                        
    'OPTIONS' : {
        'provider': 'SQLOLEDB',
        'use_mars': True,                    
          }
}
}

PS2.我在djang mssql的谷歌代码页上遇到了这个问题:http://code.google.com/p/django-mssql/issues/detail?id=79-但它似乎在新版本的软件包中得到了解决。。。

我该怎么办?

提前感谢

我们在bitbucket中得到了解决方案:https://bitbucket.org/Manfre/django-mssql/issue/13/ole-db-provider-for-sql-server-error来自迈克尔·曼弗雷-非常感谢。

解决方案如下:

"SQLOLEDBMARS工作不太好,我打算更改所有文档和默认设置,以假设将使用本机客户端驱动程序。请尝试使用本机客户端;"SQLNCLI10""SQLNCLI11"

DATABASES = {
    'default': {
        'ENGINE': 'sqlserver_ado',
        'NAME': 'mydb',
        'HOST': r'localhost',
        'USER': '',
        'PASSWORD': '',
        'OPTIONS': {
            'provider': 'SQLNCLI10',
            'extra_params': 'DataTypeCompatibility=80;MARS Connection=True;',
        },
    }
}

在"settings.py"文件中是否设置了"use_mars=True"?

http://django-mssql.readthedocs.org/en/latest/settings.html

如果这不起作用,我有一个问题:您在SQL Server中的选择是否涉及带有触发器的表(事务SQL脚本)-在这种情况下,SQL Server将使用静态光标而不是消防水管光标(这正是您所需要的),因此您会得到错误。尝试去掉触发器,在SQL Server中使用一些视图,并从中进行选择,而不是表。

相关内容

最新更新