首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用django中的游标进行make查询,但无法删除此错误TypeError:不是所有在字符串格式化期间转换的参数

问尝试使用django中的游标进行make查询,但无法删除此错误TypeError:不是所有在字符串格式化期间转换的参数
EN

Stack Overflow用户
提问于 2019-09-02 08:57:34
回答 1查看 475关注 0票数 0

我试图使用Django中的游标进行一个插入查询,但是这个错误显示我搜索了不止一个解决方案,但是没有什么帮助该错误: sql = sql % tuple('?‘*len(Params) TypeError:不是所有在字符串格式化期间转换的参数)。

我试着用'%s‘代替’'?‘但这不起作用

代码语言:javascript
复制
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)

我的数据库:

代码语言:javascript
复制
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',
        }
}  

} 
代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\College\Orange Training\MassiveMigrationPortalTool\posts\views.py", line 137, in preStepBtn1
    insert_DTARFDE2003SYD0827(sourcePE,targetPE,sourceInterFace,targetInterFace)
  File "D:\College\Orange Training\MassiveMigrationPortalTool\posts\views.py", line 36, in insert_DTARFDE2003SYD0827
    cursor.execute(sql,params)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\db\backends\utils.py", line 100, in execute
    return super().execute(sql, params)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\db\backends\utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\sql_server\pyodbc\base.py", line 542, in execute
    sql = self.format_sql(sql, params)
  File "C:\Users\Mohammed\Envs\TestEnv\lib\site-packages\sql_server\pyodbc\base.py", line 510, in format_sql
    sql = sql % tuple('?' * len(params))
TypeError: not all arguments converted during string formatting 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-02 10:52:59

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

在使用django数据库适配器时,%s必须使用占位符,这就是为什么django-pyodbc试图将%s占位符(由Django db适配器api预期)替换为? (由底层pyodbc db连接器预期)。

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

现在你提到:

我试着用'%s‘代替’'?‘但这不起作用

请注意,“没有工作”是对一个问题最无用的描述--您应该准确地解释如何它“不工作”。

但是无论如何,正如在在django文件中和pyodbc医生和db-api规范中提到的那样(更不用说解释了),--您不能引用占位符!--这就是为什么您使用'%s'的尝试也失败了。

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

代码语言:javascript
复制
sql = "insert into DTA.RFDE2003SYD0827 values (%s, %s, NULL, NULL, NULL, %s, %s)"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57754075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档