작성
·
197
0
mysql 과 mysql workbench를 설치하고 접속하려는데 안돼서 고생하고 있습니다.
코드는 아래와 같고
'code'
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from pydantic import BaseModel
DATABASE_URL = "mysql+pymysql://newjeans:@gaius2127@localhost:3306/db_name"
engine = create_engine(DATABASE_URL)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, index=True)
username = Column(String(50), unique=True, index=True)
email = Column(String(120))
class UserCreate(BaseModel):
username: str
email: str
def get_db():
db = Session(bind=engine)
try:
yield db
finally:
db.close()
Base.metadata.create_all(bind=engine)
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Now, tackle with mySQL"}
@app.post("/users/")
def create_user(user: UserCreate, db: Session = Depends(get_db)):
new_user = User(username=user.username, email=user.email)
db.add(new_user)
db.commit()
db.refresh(new_user)
return {"id": new_user.id, "username": new_user.username, "email": new_user.email}
터미널에 메세지는
PS C:\wonnho\fastapi> python -m uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['C:\\wonnho\\fastapi']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [20636] using StatReload
Process SpawnProcess-1:
Traceback (most recent call last):
File "C:\Python312\Lib\site-packages\pymysql\connections.py", line 644, in connect
sock = socket.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\socket.py", line 828, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\socket.py", line 963, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
socket.gaierror: [Errno 11003] getaddrinfo failed
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 3280, in wrappool_connect
return fn()
^^^^
중간 생략.....
File "C:\Python312\Lib\site-packages\pymysql\connections.py", line 358, in init
self.connect()
File "C:\Python312\Lib\site-packages\pymysql\connections.py", line 711, in connect
raise exc
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'gaius2127@localhost' ([Errno 11003] getaddrinfo failed)")
(Background on this error at: https://sqlalche.me/e/14/e3q8)
아이디와 패스워드가 문제인거 같은데 뭐가 문제인지 모르겠네요. 륀튼에게 물어보고 제미나이도 물어봤는데 해결이 안되어 힌트라도 얻을려고 질문합니다.위에 newjeans라는 아이디가 있음.
답변 2
0
안녕하세요. 답변 도우미입니다.
문제를 보면 MySQL에 연결할 때 오류가 발생하고 있는 것 같습니다. 오류 메시지를 보면 다음과 같은 문제가 제기되고 있습니다:
```
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'gaius2127@localhost' ([Errno 11003] getaddrinfo failed)")
```
오류의 핵심은 getaddrinfo failed
이며, 이는 네트워크 연결에 문제가 있을 수 있음을 나타냅니다. 특히, 다음 부분에 주목해야 합니다.
```python
DATABASE_URL = "mysql+pymysql://newjeans:@gaius2127@localhost:3306/db_name"
```
### 1. 잘못된 DATABASE_URL 형식
DATABASE_URL
에서 newjeans:@gaius2127@localhost
부분을 보면 문제가 발생할 가능성이 큽니다. 현재 상태는 아이디:@비밀번호@호스트
형식으로 되어 있는데, 이것은 잘못된 형식입니다.
MySQL 연결 URL의 올바른 형식은 다음과 같습니다:
```
mysql+pymysql://username:password@host:port/database_name
```
따라서, 현재 DATABASE_URL
은 다음과 같이 수정되어야 합니다:
```python
DATABASE_URL = "mysql+pymysql://newjeans:gaius2127@localhost:3306/db_name"
```
즉, 아이디가 newjeans
이고 비밀번호가 gaius2127
인 경우, 해당 URL을 올바르게 수정해야 합니다.
### 2. 비밀번호 설정 확인
스크린샷을 보면, newjeans
사용자의 비밀번호가 설정되어 있는 것으로 보입니다. MySQL Workbench를 통해 해당 사용자의 비밀번호가 정확히 gaius2127
로 설정되어 있는지 다시 확인해 보세요. 만약 비밀번호가 다르다면 MySQL Workbench에서 비밀번호를 변경하고 다시 시도해보세요.
### 3. MySQL 서버 실행 여부 확인
또한, MySQL 서버가 현재 실행 중인지 확인해야 합니다. 터미널이나 명령 프롬프트에서 다음 명령어로 MySQL 서버가 실행되고 있는지 확인할 수 있습니다:
```bash
sudo systemctl status mysql # Linux
```
또는
```bash
net start MySQL # Windows
```
### 4. 포트 확인
기본적으로 MySQL은 포트 3306
을 사용합니다. MySQL이 이 포트를 사용하는지 확인해야 합니다. 혹시 다른 포트를 사용하고 있다면, 해당 포트를 DATABASE_URL
에 반영해야 합니다.
```python
DATABASE_URL = "mysql+pymysql://newjeans:gaius2127@localhost:포트번호/db_name"
```
### 5. 방화벽 설정 확인
로컬에서 MySQL에 접근하려고 하는데 방화벽이나 네트워크 설정 때문에 접근이 막혀 있을 수 있습니다. 로컬 MySQL 접근에 필요한 포트(기본적으로 3306번 포트)가 방화벽에서 허용되어 있는지 확인해보세요.
위의 사항들을 확인한 후 다시 시도해 보시면 문제가 해결될 가능성이 큽니다.
감사합니다.
잔재미코딩 드림.
0
안녕하세요, 인프런 AI 인턴입니다. 최원호님, FastAPI와 MySQL 연동에 어려움을 겪고 계신 것 같군요. 문제를 해결하기 위해 몇 가지 점을 검토해보겠습니다.
gaius2127@localhost
부분이 문제입니다.데이터베이스 URL 확인:
DATABASE_URL
을 “mysql+pymysql://newjeans:@gaius2127@localhost:3306/db_name”로 설정하셨는데, 이는 잘못된 형식으로 보입니다. MySQL 연결 URL 형식은 mysql+pymysql://<username>:<password>@<hostname>:<port>/<dbname>
입니다. 특히, password
부분에서 @
가 포함되면 안 됩니다. 만약 비밀번호에 @
가 포함되어 있다면 %40
으로 인코딩하세요. 예를 들어: mysql+pymysql://newjeans:password%40123@localhost:3306/db_name
계정 설정 확인:
newjeans@localhost
로 설정된 MySQL 계정이 보입니다. 이 계정의 비밀번호가 DATABASE_URL
에 올바르게 설정되어 있는지 확인하세요.MySQL 서버 상태 확인:
위의 방법을 통해 문제가 해결되길 바랍니다. 어려움이 지속된다면 추가 오류 메시지나 문제 상황을 공유해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.