【发布时间】:2017-04-04 23:17:06
【问题描述】:
这是复制的样本:
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 都使用同一个游标,所以它在第二次调用时就被阻塞了。
【问题讨论】:
标签: python mysql-python