Python MySQL执行查询循环,光标关闭

时间:2017-04-04 23:17:07

标签: python mysql-python

这是转载的样本:

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的每次调用都使用相同的游标一样,所以它在第二次调用时被阻止。

1 个答案:

答案 0 :(得分:0)

当您需要连接到数据库时,您需要像光标一样的东西。您需要一个游标对象来获取结果。

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

在你的程序中,你正在关闭光标但没有再次创建它,因此当第二次执行查询到来时,没有光标存在且程序抛出错误。