sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' (timed out)")

._.·2025년 4월 8일
0

Issue

목록 보기
2/5

문제 상황

다음의 코드를 통해 MySQL Connection을 확인하고자 함.

import os

from dotenv import load_dotenv
from sqlalchemy import create_engine


load_dotenv()

database_url = os.getenv('DATABASE_URL')
engine = create_engine(database_url)

with engine.connect() as conn:
    result = conn.execute("SELECT 1;")
    print(result.scalar())

다음의 에러 발생

raceback (most recent call last):
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\pymysql\connections.py", line 649, in connect
    sock = socket.create_connection(
  File "C:\Users\InheonChoi\AppData\Local\Programs\Python\Python310\lib\socket.py", line 845, in create_connection
    raise err
  File "C:\Users\InheonChoi\AppData\Local\Programs\Python\Python310\lib\socket.py", line 833, in create_connection
    sock.connect(sa)
TimeoutError: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 146, in __init__
    self._dbapi_connection = engine.raw_connection()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 3298, in raw_connection
    return self.pool.connect()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 449, in connect
    return _ConnectionFairy._checkout(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 1264, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 713, in checkout
    rec = pool._do_get()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\impl.py", line 179, in _do_get
    with util.safe_reraise():
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__        
    raise exc_value.with_traceback(exc_tb)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\impl.py", line 177, in _do_get
    return self._create_connection()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 390, in _create_connection     
    return _ConnectionRecord(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 675, in __init__
    self.__connect()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 901, in __connect
    with util.safe_reraise():
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__        
    raise exc_value.with_traceback(exc_tb)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 897, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\create.py", line 646, in connect
    return dialect.connect(*cargs, **cparams)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\default.py", line 625, in connect
    return self.loaded_dbapi.connect(*cargs, **cparams)  # type: ignore[no-any-return]  # NOQA: E501
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\pymysql\connections.py", line 361, in __init__
    self.connect()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\pymysql\connections.py", line 716, in connect
    raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'loaclhost' (timed out)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\myproj\stock-pattern-recognition-project\db_connection_check.py", line 12, in <module>
    with engine.connect() as conn:
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 3274, in connect
    return self._connection_cls(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 148, in __init__
    Connection._handle_dbapi_exception_noconnection(
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 2439, in _handle_dbapi_exception_noconnection
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 146, in __init__
    self._dbapi_connection = engine.raw_connection()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\base.py", line 3298, in raw_connection      
    return self.pool.connect()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 449, in connect
    return _ConnectionFairy._checkout(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 1264, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 713, in checkout
    rec = pool._do_get()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\impl.py", line 179, in _do_get
    with util.safe_reraise():
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__        
    raise exc_value.with_traceback(exc_tb)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\impl.py", line 177, in _do_get
    return self._create_connection()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 390, in _create_connection     
    return _ConnectionRecord(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 675, in __init__
    self.__connect()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 901, in __connect
    with util.safe_reraise():
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__        
    raise exc_value.with_traceback(exc_tb)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\pool\base.py", line 897, in __connect
    self.dbapi_connection = connection = pool._invoke_creator(self)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\create.py", line 646, in connect
    return dialect.connect(*cargs, **cparams)
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\sqlalchemy\engine\default.py", line 625, in connect
    return self.loaded_dbapi.connect(*cargs, **cparams)  # type: ignore[no-any-return]  # NOQA: E501
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\pymysql\connections.py", line 361, in __init__
    self.connect()
  File "D:\myproj\stock-pattern-recognition-project\.venv\lib\site-packages\pymysql\connections.py", line 716, in connect
    raise exc
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'loaclhost' (timed out)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)

해결 방법

.env 세팅을 다음과 같이 해주어야 함.
DATABASEURL="mysql+pymysql://root:user_password@localhost:3306/stock_db"

참고 문헌

https://xcevor.tistory.com/563

profile
AI와 사람 사이 그 어딘가

0개의 댓글