好吧,这个让我感到困惑,所以我决定看看我是否能在这里找到答案,我上下搜索了几个 stackoverflow 问题和答案,但似乎没有任何效果。我想要做的只是使用 mysql.connector 的 SELECT * FROM 语句,但我不断收到“无结果集”错误。这是代码:
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()
Run Code Online (Sandbox Code Playgroud)
来自 cgitb 的错误显示:C:\inetpub\wwwroot\flighttoolsbz\validator.py in session_fetch(value1='ericdsmith86')
162 cursor.execute(query)
163 row = cursor.fetchall()
=> 164 results = len(cursor .fetchall())
165 clientName, clientAddr, unLocker = row[1], row[2], row[3]
166 cnx.commit()
InterfaceError: 没有可从中获取的结果集。
args = (-1, '没有要从中获取的结果集。', None)
errno = -1
msg = '没有要从中获取的结果集。'
sqlstate = None
with_traceback = InterfaceError 对象的内置方法 with_traceback
但是当我通过 MySQL 工作台并使用相同的输入值运行相同的查询时,它返回我正在寻找的一行,所以它肯定存在。我唯一能想到的是 %s 格式化程序没有将传递给函数的内容作为“value1”。我错过了什么?
您正在调用 cursor.fetchall() 两次。你不应该那样做。
改变:
row = cursor.fetchall()
results = len(cursor.fetchall())
clientName, clientAddr, unLocker = row[1], row[2], row[3]
Run Code Online (Sandbox Code Playgroud)
到:
rows = cursor.fetchall()
results = len(rows)
if results > 0:
row = rows[0]
clientName, clientAddr, unLocker = row[1], row[2], row[3]
Run Code Online (Sandbox Code Playgroud)
虽然它与您当前的问题没有任何关系,但您应该使用参数化查询:
query = "SELECT * FROM sessionkeys WHERE clientName=?"
cursor.execute(query, (value1,))
Run Code Online (Sandbox Code Playgroud)