UnboundLocalError: local variable ‘connection’ referenced before assignment

2024年6月17日

エラーメッセージ「Unknown database 'nbsystem’」は、指定したデータベースが存在しないことを示しています。この問題を解決するには、以下の手順を実行します。

1. データベースの存在を確認する

まず、データベースが存在するかを確認します。MySQLに接続し、データベースのリストを表示します。

sh
mysql -h your-rds-endpoint.rds.amazonaws.com -P 3306 -u yourusername -p

ログイン後、次のSQLコマンドを実行します。

sql
SHOW DATABASES;

nbsystemという名前のデータベースがリストに含まれていない場合、データベースを作成します。

2. データベースの作成

MySQLにログインした状態で、データベースを作成します。

sql
CREATE DATABASE nbsystem;

3. スクリプトの修正

スクリプトで、データベースの名前が正しいことを確認します。

python
import mysql.connector
from mysql.connector import Error

def connect():
    """ Connect to MySQL database """
    connection = None
    try:
        connection = mysql.connector.connect(
            host='your-rds-endpoint.rds.amazonaws.com',
            database='nbsystem',
            user='yourusername',
            password='yourpassword'
        )
        if connection.is_connected():
            db_info = connection.get_server_info()
            print(f"Connected to MySQL database... MySQL Server version on {db_info}")
            cursor = connection.cursor()
            cursor.execute("select database();")
            record = cursor.fetchone()
            print(f"You're connected to database: {record}")

    except Error as e:
        print(f"Error while connecting to MySQL: {e}")
    finally:
        if connection and connection.is_connected():
            cursor.close()
            connection.close()
            print("MySQL connection is closed")

if __name__ == '__main__':
    connect()

4. エラーハンドリングの修正

接続が失敗した場合に connection 変数が参照されないように、エラーハンドリングを修正します。

python
import mysql.connector
from mysql.connector import Error

def connect():
    """ Connect to MySQL database """
    connection = None
    try:
        connection = mysql.connector.connect(
            host='your-rds-endpoint.rds.amazonaws.com',
            database='nbsystem',
            user='yourusername',
            password='yourpassword'
        )
        if connection.is_connected():
            db_info = connection.get_server_info()
            print(f"Connected to MySQL database... MySQL Server version on {db_info}")
            cursor = connection.cursor()
            cursor.execute("select database();")
            record = cursor.fetchone()
            print(f"You're connected to database: {record}")

    except Error as e:
        print(f"Error while connecting to MySQL: {e}")
    finally:
        if connection and connection.is_connected():
            cursor.close()
            connection.close()
            print("MySQL connection is closed")

if __name__ == '__main__':
    connect()

5. 再試行

スクリプトを再実行して、接続を試みます。

bash
python your_script.py

これで、データベースが存在し、正しく指定されていれば、接続が成功するはずです。もし問題が続く場合は、さらに詳細なエラーメッセージや状況を提供してください。

未分類

Posted by ぼっち