尝试在 django 中使用光标进行插入查询,但无法摆脱此错误 类型错误:并非所有参数在字符串格式化期间转换



我正在尝试在 Django 中使用光标进行 aan 插入查询,但此错误表明我搜索了多个解决方案,但没有任何帮助,错误是: SQL = sql % tuple('?' * len(params(( 类型错误:并非所有参数在字符串格式化期间转换

我尝试使用"%s"而不是"?",但它不起作用

def insert_DTARFDE2003SYD0827(sourcePE,sourceInterFace,targetPE,targetInterFace):
params = (sourcePE, sourceInterFace,targetPE,targetInterFace)
if sourcePE!=None and sourceInterFace!=None and targetPE!=None and targetInterFace!=None:
sql=" insert into DTA.RFDE2003SYD0827 values ( '?','?',NULL,NULL,NULL,'?','?' "
with connections['DataAdmin'].cursor() as cursor:
cursor.execute(sql,params)

我的数据库:

DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'Fileade',
'HOST': '10.238.76.53',
'USER': 'SDS_dataflow',

'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
}

} ,
'DataAdmin': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'Data_Admin',
'HOST': '10.238.76.53',
'USER': 'SDS_dataflow',

'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
}
}  
} 
Traceback (most recent call last):
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangocorehandlersbase.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangocorehandlersbase.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:CollegeOrange TrainingMassiveMigrationPortalToolpostsviews.py", line 137, in preStepBtn1
insert_DTARFDE2003SYD0827(sourcePE,targetPE,sourceInterFace,targetInterFace)
File "D:CollegeOrange TrainingMassiveMigrationPortalToolpostsviews.py", line 36, in insert_DTARFDE2003SYD0827
cursor.execute(sql,params)
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangodbbackendsutils.py", line 100, in execute
return super().execute(sql, params)
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangodbbackendsutils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangodbbackendsutils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:UsersMohammedEnvsTestEnvlibsite-packagesdjangodbbackendsutils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:UsersMohammedEnvsTestEnvlibsite-packagessql_serverpyodbcbase.py", line 542, in execute
sql = self.format_sql(sql, params)
File "C:UsersMohammedEnvsTestEnvlibsite-packagessql_serverpyodbcbase.py", line 510, in format_sql
sql = sql % tuple('?' * len(params))
TypeError: not all arguments converted during string formatting 

您的错误发生在django-pyodbc数据库适配器中(这些是将 Django 模型与各种 db-api 连接器桥接的模块(。

正如 FineManual(在 FineManual( 中明确提到的,在使用 Django 数据库适配器时,无论底层 db-api 连接器期望什么,你都必须使用%s位符——这就是为什么 django-pyodbc 试图用?(底层pyodbcdb-api 连接器预期(替换%s占位符(由 django 数据库适配器 API 预期(替换的原因。

解决方案很明显:使用预期的%s占位符。

现在你提到:

我尝试使用"%s"而不是"?",但它不起作用

请注意,"不起作用"是对问题的最无用的描述 - 您应该确切地解释它是如何"不起作用"的。

但无论如何:正如 django 文档中明确提到的,以及(我不得不说,我不得不说(在 pyodbc 文档和 db-api 规范中,您不得引用占位符!!- 这就是为什么您使用'%s'的尝试也失败了。

长话短说:您的 SQL 查询应该是:

sql = "insert into DTA.RFDE2003SYD0827 values (%s, %s, NULL, NULL, NULL, %s, %s)"

相关内容

最新更新