好吧,这个问题让我很困惑,所以我决定看看我是否能在这里找到一个答案,我上下搜索了几个堆栈溢出的问题和答案,似乎什么都没有用。我所要做的就是使用mysql.connector执行SELECT * FROM语句,但一直收到"No Result Set“错误。代码如下:
def session_fetch(value1):
cnx = mysql.connector.connect(user='xxx', password='xxx',
host='127.0.0.1', database='xxx')
cursor = cnx.cursor()
query = ("SELECT * FROM sessionkeys "
"WHERE clientName='%s';") % value1
cursor.execute(query)
row = cursor.fetchall()
results = len(cursor.fetchall())
clientName, clientAddr, unLocker = row[1], row[2], row[3]
cnx.commit()
cursor.close()
cnx.close()cgitb的错误显示:session_fetch中的C:\inetpub\wwwroot\flighttoolsbz\validator.py (Value1=‘ericdsmith86’)
162 cursor.execute(query) 163 row = cursor.fetchall()=> 164结果= len(cursor.fetchall())
165 clientName, clientAddr, unLocker = row[1], row[2], row[3] 166 cnx.commit()InterfaceError:没有要从中提取的结果集。
args = (-1, 'No result set to fetch from.', None) errno = -1 msg = 'No result set to fetch from.' sqlstate = None with\_traceback = built-in method with\_traceback of InterfaceError object但是,当我遍历MySQL工作台并使用相同的输入值运行相同的查询时,它返回我正在查找的一行,因此它肯定在那里。我能想到的唯一一件事是%s格式化程序没有将传递给函数的内容作为'value1‘。我遗漏了什么?
发布于 2017-05-29 06:50:48
您正在调用cursor.fetchall()两次。你不该这么做。
更改:
row = cursor.fetchall()
results = len(cursor.fetchall())
clientName, clientAddr, unLocker = row[1], row[2], row[3]至:
rows = cursor.fetchall()
results = len(rows)
if results > 0:
row = rows[0]
clientName, clientAddr, unLocker = row[1], row[2], row[3]虽然它与您当前的问题没有任何关系,但您应该使用参数化查询:
query = "SELECT * FROM sessionkeys WHERE clientName=?"
cursor.execute(query, (value1,))发布于 2017-05-29 07:07:02
正如时钟守望者所说,您调用了cursor.fetchall()两次,他的解决方案可以解决问题。
SQL查询本身的编写方式使您的代码面临严重的安全漏洞,因为查询不会正确地转义输入参数。与clockwatcher的响应类似,正确的SQL查询可能是:
query = ("SELECT * FROM sessionkeys WHERE clientName='%s'", (value1,))此外,由于您没有修改任何数据,according to the mySQL connector documentation,因此不需要调用commit()方法。
因此,将所有这三个更改合并在一起,您的代码将如下所示:
def session_fetch(value1):
cnx = mysql.connector.connect(user='xxx', password='xxx',
host='127.0.0.1', database='xxx')
cursor = cnx.cursor()
query = ("SELECT * FROM `sessionkeys` WHERE `clientName`='%s'", (value1,))
cursor.execute(query)
rows = cursor.fetchall()
results = len(rows)
if results > 0:
row = rows[0]
clientName, clientAddr, unLocker = row[1], row[2], row[3]
cursor.close()
cnx.close()https://stackoverflow.com/questions/44232426
复制相似问题