[英]python mysql connection.cursor().execute fails on the second query
[英]Python MySQL execute query loop with cursor close
这是转载的示例:
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()
。 但是我发现很奇怪的是,即使对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的每个调用都使用相同的游标一样,因此它在第二个调用时立即被阻塞。
当您需要连接到数据库时,您需要像游标之类的东西。 您需要一个游标对象来获取结果。
在示例程序中,当您在范围(4)中运行循环时,它将调用execQuery()
。 查看定义,您可以找到def execQuery(cursor=getCursor()):
该函数将输入作为光标,并且默认情况下,它使用getCursor()
函数在执行循环时创建所有光标。
在程序中时,您正在关闭游标,但没有再次创建游标,因此,当第二次执行查询到来时,游标将不存在,并且程序将引发错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.