首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带游标关闭的Python MySQL执行查询循环

问带游标关闭的Python MySQL执行查询循环
EN

Stack Overflow用户
提问于 2017-04-04 23:17:06
回答 1查看 1.9K关注 0票数 0

这是复制的样本:

代码语言:javascript
复制
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()进行了简单的更改,这个示例也可以工作:

代码语言:javascript
复制
def execQuery():
  cursor=getCursor()
  cursor.execute("SELECT 2")
  cursor.fetchall()
  cursor.close()

通过将默认参数移动到函数的主体。

我不知道关闭游标是否是最佳实践,所以我可以跳过关闭游标,同时保留第一个表单。如果使用函数的返回值的默认参数不是最佳实践,我可以使用第二种形式。,但我想知道为什么他们的行为不同,

就好像我犯了同样的错误:

代码语言:javascript
复制
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
cursor.execute("SELECT 2")

就像execQuery的每个调用都使用相同的游标一样,因此在第二个调用时就会被阻塞。

EN

回答 1

Stack Overflow用户

发布于 2017-04-05 06:56:38

当您需要连接到数据库时,您需要类似于游标的内容。您需要一个游标对象来获取结果。

在示例程序中,当您在range (4)中运行循环时,它调用execQuery()。从定义上看,您可以找到def execQuery(cursor=getCursor()):,函数以输入作为游标,默认情况下,它使用getCursor()函数,在执行循环时创建游标。

在您的程序中,您正在关闭游标,但没有再次创建游标,因此当第二个执行查询出现时,没有游标出现,程序抛出一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43219303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档