繁体   English   中英

使用Python连接到MySQL数据库时出错

[英]Error when connecting to MySQL database with Python

我正在使用一个简单的python函数连接到MySQL数据库。我收到一条错误消息,指出在分配变量之前已引用了该变量,但如果连接已成功建立则不是这种情况。 为什么连接失败?

我正在使用Ubuntu Linux 18.04。 我正在运行xampp 7.3来托管mySQL和apache服务器,并正在使用phpmyadmin访问数据库。我正在使用python 3运行我的代码。

这是我的代码:

import mysql.connector
from mysql.connector import Error

def connect():
    """ Connect to MySQL database """

    try:
        conn = mysql.connector.connect(host='localhost',
                               database='myDB',
                               user='xxx',
                               password='yyy!')

        if conn.is_connected():
            print('Connected to MySQL database')

    except Error as e:
        print(e)

    finally:
        conn.close()

if __name__ == '__main__':
connect()

这是我收到的错误:

Traceback (most recent call last):
  File "01_python-mysql-connect.py", line 23, in <module>
     connect()
  File "01_python-mysql-connect.py", line 19, in connect
     conn.close()
UnboundLocalError: local variable 'conn' referenced before assignment

我期望成功连接到数据库。 我认为我的配置可能有问题,但不知道从哪里开始解决问题。 谢谢。

这条线

conn = mysql.connector.connect(host='localhost',
                           database='myDB',
                           user='xxx',
                           password='yyy!')

失败了。 因此conn永远不会获得分配的值。 但是您有一个try...except...finally块,并且在finally子句中,您的代码正在执行conn.close() 但是conn尚未分配,因为应该为它分配值的语句失败。 这就是为什么您看到分配前引用的消息局部变量'conn'的原因 要发现问题所在,请将调用close移出finally子句,然后将其放在except之前。 您以后可以随时将其移回。

如果mysql.connector.connect()调用失败,则不会分配conn ,因此出现“分配前引用”异常。

我认为这是contextlib.closes上下文管理器的理想用例。 尝试这样的事情:

from contextlib import closing

try:
    with closing(mysql.connector.connect(...)) as conn:
        if conn.is_connected():
            print('Connected to MySQL database')

except Error as e:
    print(e)

这将干净可靠地为您关闭连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM