Python MySQL ReferenceError:弱引用对象不再存在

Lux*_*aaa 5 python mysql python-3.x

我想连接到 mySQL Server 并从用户表中获取所有用户。但如果我尝试执行我的代码,它会说:

/bin/python /home/luca/PycharmProjects/Test/sql.py
Traceback (most recent call last):
  File "/home/luca/PycharmProjects/Test/sql.py", line 18, in <module>
    for x in get_user_by_username("testuser"):
  File "/usr/lib/python3.8/site-packages/mysql/connector/cursor.py", line 861, in fetchone
    row = self._fetch_row()
  File "/usr/lib/python3.8/site-packages/mysql/connector/cursor.py", line 831, in _fetch_row
    if not self._have_unread_result():
  File "/usr/lib/python3.8/site-packages/mysql/connector/cursor.py", line 351, in _have_unread_result
    return self._connection.unread_result
ReferenceError: weakly-referenced object no longer exists

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

这是我的代码

import mysql.connector


def get_user_by_username(username):
 mydb = mysql.connector.connect(
     host="localhost",
     user="testuser",
     passwd="k3gc8pHPvEtGqND",
     database="test"
 )

 mycursor = mydb.cursor()

 mycursor.execute("SELECT * FROM users")
 return mycursor


for x in get_user_by_username("testuser"):
    print(x)
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何解决它?

ywb*_*aek 11

cursor对象使用connection对象。
当你的get_user_by_username函数完成执行时,
与 mysql 的连接将关闭,因此cursor也不能存在。
让函数返回连接和光标将起作用。

import mysql.connector

def get_user_by_username(username):
    mydb = mysql.connector.connect(
        host="localhost",
        user=username,
        passwd="k3gc8pHPvEtGqND",
        database="test"
        )

    mycursor = mydb.cursor()

    mycursor.execute("SELECT * FROM users")
    return mydb, mycursor

mydb, mycursor = get_user_by_username("testuser")
for x in mycursor:
    print(x)
Run Code Online (Sandbox Code Playgroud)