是否可以在Django / South中设置SQL Server查询超时?

时间:2013-11-07 16:01:10

标签: python sql sql-server django django-south

我有一个Django应用程序,我刚刚迁移到South进行模型/数据库同步。我在对模型进行一些更改后创建了一个新的迁移(即添加一个新的外键字段)。以下是新迁移中的代码示例 0002_auto__add_field_table_new_field.py

class Migration(SchemaMigration):

    def forwards(self, orm):
        # Adding field 'Table.new_field'
        db.add_column(u'Table', 'new_field',
                      self.gf('django.db.models.fields.related.ForeignKey')(to=orm['database.other_table'], null=True, blank=True),
                      keep_default=False)


    def backwards(self, orm):
        # Deleting field 'Table.new_field'
        db.delete_column(u'Table', 'new_field')

当我尝试应用迁移时,查询总是在大约30秒后超时,并显示以下错误消息:

  

sqlserver_ado,dbapi.DatabaseError:(-2147352567,'Exception Ocured。',(0,u'Microsoft SQL Server Native Client 10.0',u'Query timeout expired',None,0,-2147217871),None)< / p>

是否可以增加SQL Server查询超时?除了如何在SSMS中增加价值之外,我一直无法找到任何具体的文档,但是这样做没有任何区别。这可能是在Django settings.py中完成的吗?

3 个答案:

答案 0 :(得分:0)

事实证明问题是由后端python db模块sqlserver_ado引起的。正是这个模块决定了查询超时。我修改了我的settings.py,现在改为使用sql_server.pyodbc ENGINE。现在已成功应用此迁移。

答案 1 :(得分:0)

如果您需要坚持使用 sqlserver_ado 驱动程序,可以按照此问题中的描述设置查询超时(默认为30秒): Query timeout expired in django-mssql when executing custom SQL directly

DATABASES = {
'default': {
    'NAME': DATABASE_NAME,
    'ENGINE': 'sqlserver_ado',
    'HOST': DATABASE_HOST,
    'USER': DATABASE_USER,
    'PASSWORD': DATABASE_PASSWORD,
    'COMMAND_TIMEOUT': timeout_in_seconds,
   }
}

答案 2 :(得分:0)

这个问题有点老了,但这是Google搜索结果的顶部,因此,我想补充一下以后出现的问题,如果您将pyodbc与django-pyodbc一起使用(特别是django-pyodbc-azure对于更现代的Django),可能有一些有趣的设置;请特别注意query_timeout设置:

  

  • connection_timeout

         

    整数。设置数据库连接过程的超时(以秒为单位)。默认值为0,将禁用超时。

  •      

  • connection_retries

         

    整数。设置重试数据库连接过程的时间。默认值为5。

  •      

  • connection_retry_backoff_time

         

    整数。设置重试数据库连接过程的退避时间(以秒为单位)。默认值为5。

  •      

  • query_timeout

         

    整数。设置以秒为单位的数据库查询超时。默认值为0,将禁用超时。

  • 在数据库选项中添加query_timeout设置使我可以解决数据库锁发生的问题(当前我写代码的位置并不重要):

    DATABASES = {
        'default': {
            # ...
            'OPTIONS': {
                'driver': 'FreeTDS',
                'query_timeout': 6,
            },
        },
    }