【发布时间】:2020-02-19 18:07:36
【问题描述】:
我创建了我用 cursor.execute 方法调用的这个过程。我遇到的问题是 PYODBC 看到的参数比我给出的要多。 在此示例查询中,“-”和“-”被 PYODBC 作为额外参数读取。有谁知道为什么会这样?每当我在 Access 中进行任何字符串连接时都会发生这种情况。
def GetAccessResults(self):
with pyodbc.connect(SQL.DBPath) as con:
cursor = con.cursor()
if self.parameters == None:
cursor.execute('{{Call {}}}'.format(self.storedProc))
else:
callString = self.__CreateStoredProcString()
cursor.execute(callString, self.parameters)
returnValue = cursor.fetchall()
return returnValue
def __CreateStoredProcString(self):
questionMarks = ('?,' * len(self.parameters))[:-1]
return '{{Call {} ({})}}'.format(self.storedProc, questionMarks)
【问题讨论】:
-
由于您是动态构建 sql 的,因此您可以转储参数语句。如果您的列有空格或其他奇怪的字符(不好),那么用 [](方括号)将列名括起来。
-
PYODBC 看到的参数比我给出的更多 ...请发布实际错误和代码。
-
@Parfait 我在没有引号部分的情况下运行了这个完全相同的查询,并且查询在正确数量的参数下运行良好。一旦我将它们添加回来,无论引号中的内容是什么,PYODBC 都会添加两个参数。我用代码更新了我的帖子。
-
PYODBC 添加两个参数 ...再次,请在问题正文中逐字发布实际错误/异常。此外,尝试在存储的访问查询中使用单引号(双引号保留用于 SQL 标识符)。与 Access ODBC 相比,Access GUI 做了不同的事情。
-
@Parfait 抱歉,我认为添加异常不会为这里的问题增加任何价值。不过你是对的,解决了我的问题。一旦我切换到单引号,查询就会按预期运行。我只是花了太长时间试图弄清楚这一点。感谢您的帮助!