繁体   English   中英

Python MySQL使用游标关闭执行查询循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM