我有一个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中完成的吗?
答案 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,
},
},
}