gpt4 book ai didi

python - 为什么 Python 不会从函数中返回我的 mysql-connector 光标?

转载 作者:行者123 更新时间:2023-12-04 18:44:58 24 4
gpt4 key购买 nike

当我从函数返回时,Python(2.7.3)以某种奇怪的方式违反了我的 mysql-connector 光标。这第一个例子工作正常......

cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
row = cursor.fetchone()

但是,如果我返回游标并从外部尝试 fetchone()(或 fetchall()),则会引发异常......
def run_query():
cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
return cursor

mycursor = run_query()
row = mycursor.fetchone()

它抛出...
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 533, in fetchone
row = self._fetch_row()
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 508, in _fetch_row
(row, eof) = self.db().protocol.get_row()
AttributeError: 'NoneType' object has no attribute 'protocol'

尽管“打印类型(mycursor)”将打印“mysql.connector.cursor.MySQLCursor”这一事实

Python 对从函数返回的对象执行什么类型的恶意骚扰? (请记住,它将对模块内传递的游标执行此操作......所以,它不像传递出“import mysql.connector”范围的对象......)

最佳答案

我没有立即可用的 MySQL,但正如 Preet Sangha 所提到的,当您在函数内连接到数据库并返回光标时,您的 cnx函数退出时变量超出范围,因此数据库连接关闭并且您的游标引用已关闭的数据库连接。

在您的顶部代码示例中不是这种情况,这可以解释为什么它可以工作以及为什么底部示例不能。

关于python - 为什么 Python 不会从函数中返回我的 mysql-connector 光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16514431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com