这是转载的样本:
import mysql.connector
conn = mysql.connector.connect(
user='root', password='12347',
host='localhost')
def getCursor():
return conn.cursor()
def execQuery(cursor=getCursor()):
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
for i in range(4):
cursor = execQuery()
此代码不使用cursor.close()
。但我觉得奇怪的是,这个示例甚至可以使用cursor.close()进行简单的更改:
def execQuery():
cursor=getCursor()
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
将默认参数移动到函数体中。
我不知道关闭光标是否是最佳做法,因此我可以在保留第一张表格的同时跳过关闭光标。如果拥有使用函数返回值的默认参数不是最佳做法,我可以使用第二种形式。 但我想知道他们为什么采取不同的行动
我和我有同样的错误:
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
cursor.execute("SELECT 2")
就像execQuery的每次调用都使用相同的游标一样,所以它在第二次调用时被阻止。
答案 0 :(得分:0)
当您需要连接到数据库时,您需要像光标一样的东西。您需要一个游标对象来获取结果。
在示例程序中,当您在范围(4)中运行循环时,它会调用execQuery()
。查看定义,您可以找到def execQuery(cursor=getCursor()):
函数将输入作为游标,默认情况下它使用getCursor()
函数,该函数在执行循环时创建游标。
在你的程序中,你正在关闭光标但没有再次创建它,因此当第二次执行查询到来时,没有光标存在且程序抛出错误。