Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyodbc无法识别多行字符串中的参数占位符_Python_Pyodbc - Fatal编程技术网

Python pyodbc无法识别多行字符串中的参数占位符

Python pyodbc无法识别多行字符串中的参数占位符,python,pyodbc,Python,Pyodbc,为什么pyodbc会抛出此错误: pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000') 当我在查询中有参数标记时 似乎只有在python中使用多行字符串时才会出现问题 i、 e.这会导致错误: sql = """ SELECT a.r_object_id, a.object_name, a.document_status, a.docu

为什么pyodbc会抛出此错误:

pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000')
当我在查询中有参数标记时

似乎只有在python中使用多行字符串时才会出现问题

i、 e.这会导致错误:

sql = """
SELECT a.r_object_id, a.object_name, a.document_status, a.document_id, a.document_status, b.r_version_label, a.r_link_cnt  
from pharma_document_sp a, pharma_document_rp b where a.r_object_id = b.r_object_id  and b.r_version_label = 'LATEST APPROVED' and a.document_id = ?
"""


cursor_cara.execute(sql, doc_id)
但这没关系:

sql = "SELECT a.r_object_id, a.object_name, a.document_status, a.document_id, a.document_status, b.r_version_label, a.r_link_cnt  "

sql = sql + " from pharma_document_sp a, pharma_document_rp b where a.r_object_id = b.r_object_id  and b.r_version_label = 'LATEST APPROVED' and a.document_id = ?"


cursor_cara.execute(sql, doc_id)
我正在使用:
pyodbc版本4.0.27,SQL ODBC服务器驱动程序17,Python 3.7.4

pyodbc使用?而不是%s作为参数占位符。我使用?查看代码?问题在于,构建SQL的字符串连接是有效的,而使用多行字符串的代码是无效的。cx\U oracle在多行字符串上使用绑定参数(:parameter)可以正常工作。胡乱猜测:尾部的
\n
可能是个问题?如果在多行字符串中的
后面添加空格会发生什么情况?我无法使用Python 3.8.1、pyodbc 4.0.30和SQL Server的ODBC驱动程序17重现您的问题。请将您的问题包括您正在使用的版本。添加了pyodbc等的版本详细信息。