微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.cursor() 使 MySQL 不可用

如何解决.cursor() 使 MySQL 不可用

我正在尝试从 Python 连接到现有的 MysqL 数据库并创建一个表。以下是代码

from getpass import getpass
from MysqL.connector import connect,Error

def connect_db():
    try:
        with connect(
                host="localhost",user=input("Enter username: "),password=getpass("Enter password: "),database="online_movie_rating",) as connection :
            return connection
    except Error as e:
        print(e)

create_ratings_table_query = """
CREATE TABLE ratings (
    movie_id INT,reviewer_id INT,rating DECIMAL(2,1),FOREIGN KEY(movie_id) REFERENCES movies(id),FOREIGN KEY(reviewer_id) REFERENCES reviewers(id),PRIMARY KEY(movie_id,reviewer_id)
);
"""
cnx = connect_db()

print(cnx)

cursor = cnx.cursor()
cursor.execute(create_ratings_table_query)
cnx.commit()

当我评论最后 3 行时,我可以打印连接对象。但是,当我取消注释并尝试运行时,出现以下错误

cursor = cnx.cursor()
MysqL.connector.errors.OperationalError: MysqL Connection not available.

我在 conda 环境中使用 Fedora 33 操作系统、Python 3.8.5,并使用 VS Code 作为 IDE。已经pip安装了mysql-connector-python。

有人可以帮忙吗?已经做了很多谷歌搜索,但找不到明确的答案。

提前致谢

解决方法

你有:

def connect_db():
    try:
        with connect(
                host="localhost",user=input("Enter username: "),password=getpass("Enter password: "),database="online_movie_rating",) as connection :
            return connection
    except Error as e:
        print(e)

但是一旦您的 return connection 执行,with connect(...) as connection: 块就会终止并关闭连接。因此,如果连接成功,您将返回一个关闭的连接。你需要:

def connect_db():
    try:
        connection = connect(
                host="localhost",)
        return connection
    except Error as e:
        print(e)

调用者可以使用 cnx.close() 明确地关闭连接,或者当没有更多对此连接的引用时,它会自动关闭,例如当 cnx 超出范围时。

另外,如果连接出错,函数connect_db会返回None。因此,也许呼叫者应该检查这种可能性。

然而,您得到的实际异常解释如下:

此异常是针对与 MySQL 操作相关的错误引发的。例如:连接太多;无法解析主机名;握手不好;服务器正在关闭,通信错误。

您需要检查您的连接参数。但很明显,您必须进行上述源代码更改。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?