inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

docker mysql 연동

미해결

실전! FastAPI 입문

docker에서는 mysql에 정상적으로 접속이 되는데 python console을 통해서 연결을 시도하면 sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2059, "Authentication plugin 'b'auth_gssapi_client'' not configured") 다음 에러가 나옵니다. select host, user from mysql.user where user= 'root'; 쿼리를 통해서 user 정보를 확인해보면 정상적으로 user가 셋팅 되어있습니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
jino 댓글 2 좋아요 0 조회수 1081

pytest는 어떻게 모킹함수를 인지하는지

해결됨

실전! FastAPI 입문

안녕하세요 강사님 강의 정말 재밌게 보고 있습니다. 수강 도중 궁금한 내용이 생겨 질문 남깁니다. mocker.patch("main.get_todo_by_todo_id", return_value=Todo(id=1,contents="todo",is_done=True)) 여기서 인자값으로 문자열 main.get_todo_by_todo_id 를 전달했는데, pytest는 어떻게 저 함수를 모킹대상으로 인지하나요? 개념적으로 설명해주시면 감사합니다~!! response = client.patch("/todos/1", json={"is_done":False}) 해당 api 를 호출하고 실행하는 과정에서 main_get_todo_by_todo_id 함수를 호출할 때 어떻게 모킹처리가 되는지 궁금합니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
유준모 댓글 1 좋아요 0 조회수 330

타입힌트 질문

해결됨

실전! FastAPI 입문

안녕하세요 강사님 강의 듣는 도중 조금 궁금한 내용이 생겨서 질문드립니다. 코드에서 아래와 같이 타입힌트를 사용하는 경우가 있는데 def done(self) -> "Todo": self>is done = True ~ 왜 Todo에 "" 를 감싸주시는걸까요?? 그냥 Todo 라고 타입힌트를 줘도될거 같은데 이유가 궁금해서요

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
유준모 댓글 1 좋아요 0 조회수 314

코드 질문

해결됨

실전! FastAPI 입문

안녕하세요. 파이썬 2.7만 주로 쓰다 오랜만에 쓰니 좀 헷갈리는게 있어 질문드립니다. encoding: str = "UTF-8" service 작성하시면서 설명해주신 코드인데, encoding = "UTF - 8" 이렇게 써도 encoding 변수에 뭐가 들어가는지 바로 확인이 되는데 굳이 : str 과 타입을 명시할 이유가 있나요 ? 이렇게 작성하였을 때 왜 이렇게 작성하고 어떠한 장점이 있는지 궁금합니다. 비슷한 질문으로 def save_user(self, user: User) -> User: 다음과 같이 반환 타입을 적어줘야 하는 것도 설명 부탁드립니다. 작성하면서도 이걸 굳이 적어줘야 하는지가 궁금해서 질문드립니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
인프린 댓글 1 좋아요 0 조회수 271

router testcode 문의

해결됨

실전! FastAPI 입문

router test code 에서 test_ main.py 파일에 api.todo라고 main을 바꾸어 줬는데 import를 따로 안 시켜줘도 되나요 ? main.py 는 from api import todo로 import 시키는데 test_ main.py 는 안 그래도 되는지 궁금합니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
인프린 댓글 1 좋아요 0 조회수 315

docker 설치 에러

해결됨

실전! FastAPI 입문

안녕하세요. 윈도우 os 사용중이고 docker desktop 설치 시 이후 데몬이 활성화가 안되어 질문드립니다. 데몬 활성화를 위해서는 가상화 지원이 되어야 하는데, bios 세팅 및 os 가상화 설정을 모두 하여서 작업관리자에서 가상화:사용 이라고 까지 표기가 되어도 하이퍼바이저 지원이 안된다는 에러가 나옵니다. wsl 설치 또한 가상화가 지원이 안된다는 에러와 함께 설치가 안되어 구글링 이후 문의 드립니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
인프린 댓글 1 좋아요 0 조회수 339

uvicorn 실행 에러

해결됨

실전! FastAPI 입문

안녕하세요. 학습 도중 재부팅하여 다시 uvicorn 실행하려고 하니 ERROR: Error loading ASGI app. Could not import module "main". 다음과 같은 메세지가 나오면서 fast api 앱이 실행이 안되는데 이유가 궁금합니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
인프린 댓글 1 좋아요 0 조회수 1562

src 디렉토리를 기본으로 설정하는 방

해결됨

실전! FastAPI 입문

from main import app이 아닌 from src.main import app을 하게 되면 에러가 발생합니다. src. 을 생략할 수 있도록 하는 방법이 없을까요

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
fade 댓글 2 좋아요 0 조회수 396

session.scalar(select(1)) 에러 발생 질문입니다.

해결됨

실전! FastAPI 입문

에러명은 다음과 같습니다. 도커 설정은 이상이 없는데 어디서 문제가 생긴걸까요 pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다)") The above exception was the direct cause of the following exception:

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
fade 댓글 1 좋아요 0 조회수 304

DATABASE_URL 상수변수 질문

해결됨

실전! FastAPI 입문

도커를 이용해 컨테이너를 실행시킬 때 root 사용자에 대해서 todos라는 비밀번호를 갖도록 설정을 해주었는데, DATABASE_URL = "mysql+pymysql://root:todos@127.0.0.1:3306/todos" 상수 변수를 이용해 데이터베이스 연결 시도 시, (1045, "Access denied for user 'root'@ 'localhos t' (using password: YES)") 이런 에러가 발생합니다. 비밀번호를 설정하였는데도 왜 이렇게 발생하는 건가요?

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
qpal1zm23 댓글 1 좋아요 0 조회수 266

(실습) ORM 적용 - HTTP Response 처리

미해결

실전! FastAPI 입문

from typing import List from fastapi import FastAPI, Body, HTTPException, Depends from pydantic import BaseModel from sqlalchemy.orm import Session from database.orm import ToDo from database.connection import get_db from database.repository import get_todos from schema.response import ListToDoResponse, ToDoSchema app = FastAPI() @app.get("/") def heath_check_handler(): return {"ping": "pong"} todo_data = { 1: { "id": 1, "contents": "실전! FastAPI 섹션 0 수강", "is_done": True, }, 2: { "id": 2, "contents": "실전! FastAPI 섹션 1 수강", "is_done": False, }, 3: { "id": 3, "contents": "실전! FastAPI 섹션 2 수강", "is_done": False, }, } @app.get("/todos", status_code=200) def get_todos_handler( order: str | None = None, session: Session = Depends(get_db), ) -> ListToDoResponse: todos: List[ToDo] = get_todos(session=session) if order and order == "DESC": return ListToDoResponse( todos=[ToDoSchema.from_orm(todo) for todo in todos[::-1]] ) return ListToDoResponse( todos=[ToDoSchema.from_orm(todo) for todo in todos] ) @app.get("/todos/{todo_id}", status_code=200) def get_todo_handler(todo_id: int): todo = todo_data.get(todo_id) if todo: return todo raise HTTPException(status_code=404, detail="ToDo Not Found") class CreateToDoRequest(BaseModel): id: int contents: str is_done: bool @app.post("/todos", status_code=201) def create_todo_handler(request: CreateToDoRequest): todo_data[request.id] = request.dict() return todo_data[request.id] @app.patch("/todos/{todo_id}", status_code=200) def update_todo_handler( todo_id: int, is_done: bool = Body(..., embed=True) ): todo = todo_data.get(todo_id) if todo: todo["is_done"] = is_done return todo raise HTTPException(status_code=404, detail="ToDo Not Found") @app.delete("/todos/{todo_id}") def delete_todo_handler(todo_id: int): todo = todo_data.pop(todo_id, None) if todo: return raise HTTPException(status_code=404, detail="ToDo Not Found") from typing import List from pydantic import BaseModel class ToDoSchema(BaseModel): id: int contents: str is_done: bool class Config: orm_mode = True class ListToDoResponse(BaseModel): todos: List[ToDoSchema] from typing import List from sqlalchemy import select from sqlalchemy.orm import Session from database.orm import ToDo def get_todos(session: Session) -> List[ToDo]: return list(session.scalars(select(ToDo))) from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker DATABASE_URL = "mysql+pymysql://root:todos@127.0.0.1:3306/todos" engine = create_engine(DATABASE_URL, echo=True) SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=engine) def get_db(): session = SessionFactory() try: yield session finally: session.close() from sqlalchemy import Boolean, Column, Integer, String from sqlalchemy.orm import declarative_base Base = declarative_base() class ToDo(Base): __tablename__ = 'todo' id = Column(Integer, primary_key=True, index=True) contents = Column(String(256), nullable=False) is_done = Column(Boolean, nullable=False) def __repr__(self): return f"ToDo(id={self.id}, contents={self.contents}, is_done={self.is_done})" 에러가 납니다. 파이썬 콘솔 <input>:1: PydanticDeprecatedSince20: The from_orm method is deprecated; from schema.response import ToDoSchema from datagbase.orm import ToDo Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\pydevconsole.py", line 364, in runcode coro = func() ^^^^^^ File "<input>", line 1, in <module> File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import module = self._system_import(name, args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ModuleNotFoundError: No module named 'datagbase' from database.orm import ToDo todo = ToDo(id=100, contents="test", is_done=True) ToDoSchema.from_orm(todo) <input>:1: PydanticDeprecatedSince20: The from_orm method is deprecated; set model_config['from_attributes']=True and use model_validate instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.5/migration/ Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\pydevconsole.py", line 364, in runcode coro = func() ^^^^^^ File "<input>", line 1, in <module> File "C:\Users\manag\pyProject\todos\Lib\site-packages\typing_extensions.py", line 2499, in wrapper return arg(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\pydantic\main.py", line 1126, in from_orm raise PydanticUserError( pydantic.errors.PydanticUserError: You must set the config attribute from_attributes=True to use from_orm http://localhost:8000/docs#/default/get_todos_handler_todos_get 접속시 터미널 INFO: 127.0.0.1:56312 - "GET /docs HTTP/1.1" 200 OK INFO: 127.0.0.1:56312 - "GET /openapi.json HTTP/1.1" 200 OK 2024-01-23 16:06:15,108 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2024-01-23 16:06:15,109 INFO sqlalchemy.engine.Engine SELECT todo.id, todo.contents, todo.is_done FROM todo 2024-01-23 16:06:15,109 INFO sqlalchemy.engine.Engine [cached since 826.5s ago] {} 2024-01-23 16:06:15,113 INFO sqlalchemy.engine.Engine ROLLBACK INFO: 127.0.0.1:56312 - "GET /todos HTTP/1.1" 500 Internal Server Error ERROR: Exception in ASGI application Traceback (most recent call last): File "C:\Users\manag\pyProject\todos\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 404, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in call return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\applications.py", line 1054, in call await super().__call__(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\applications.py", line 123, in call await self.middleware_stack(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\errors.py", line 186, in call raise exc File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\errors.py", line 164, in call await self.app(scope, receive, _send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app raise exc File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 762, in call await self.middleware_stack(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 782, in app await route.handle(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 297, in handle await self.app(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 77, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app raise exc File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 72, in app response = await func(request) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 299, in app raise e File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 294, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 193, in run_endpoint_function return await run_in_threadpool(dependant.call, **values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\concurrency.py", line 40, in run_in_threadpool return await anyio.to_thread.run_sync(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\_backends\_asyncio.py", line 2134, in run_sync_in_worker_thread return await future ^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\_backends\_asyncio.py", line 851, in run result = context.run(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\src\main.py", line 48, in get_todos_handler todos=[ToDoSchema.from_orm(todo) for todo in todos] ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\typing_extensions.py", line 2499, in wrapper return arg(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\pydantic\main.py", line 1126, in from_orm raise PydanticUserError( pydantic.errors.PydanticUserError: You must set the config attribute from_attributes=True to use from_orm

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
네오스카이 댓글 2 좋아요 0 조회수 1267

test 코드 질문

해결됨

실전! FastAPI 입문

강의 너무 잘보고 있습니다 test 코드 실습 중에 생긴 문제인데요 def test_update_todo(client, mocker): mocker.patch.object(ToDoRepository, "get_todo_by_todo_id", return_value=ToDo(id=1, contents="todo", is_done=True)) mocker.patch.object(ToDoRepository, "update_todo", return_value=ToDo(id=1, contents="todo", is_done=True)) body = { "is_done": False } response = client.patch("/todos/1", json=body) assert response.status_code == 200 assert response.json() == {"id": 1, "contents": "todo", "is_done": True} # 404 mocker.patch.object(ToDoRepository, "get_todo_by_todo_id", return_value=None) response = client.patch("/todos/1", json=body) assert response.status_code == 404 assert response.json() == {"detail": "ToDo Not Found"} 이런식으로 test 코드를 작성한 다음에 리팩토링 과정에서 잘못선택되서 todo_id가 빠진 상태로 코드를 올렸습니다 @router.patch("/{todo_id}", status_code=200) def update_todo_handler( todo_id: int, is_done: bool = Body(..., embed=True), todo_repo: ToDoRepository = Depends()): todo: ToDo | None = todo_repo.get_todo_by_todo_id() # 이 부분 todo_id를 빼버림 if todo: todo.done() if is_done else todo.undone() todo: ToDo = todo_repo.update_todo(todo) return ToDoSchema.from_orm(todo) else: raise HTTPException(status_code=404, detail="ToDo Not Found") 이게 제가 잘못 작성한 코드고 todo.get_todo_by_todo_id 함수에 parameter를 안넣고 pytest를 실행해도 mocker.patch로 지정된 값이 넘어오게 되니까 에러가 나지 않더라구요 실행하면 당연히 500 internal error가 발생하는데 혹시 이런 경우까지 방지하도록 test 코드를 바꾼다면 어떻게 바꿔야할까요?

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
한건우 댓글 1 좋아요 0 조회수 293

Uvicorn을 이용한 API 외부서버 접속이 가능한가요?

해결됨

실전! FastAPI 입문

안녕하세요 강사님 해당 내용을 아무리 찾아봐도 보편적으로 배포에 관련한 내용들이 로컬 호스트로 접속하는것 또는 aws등의 외부 서버를 통해서 배포하는 방식위주로 설명이되어있는데, uvicorn을 사용해서 저희 실습을 기준으로는 uvicorn main:app --host 0.0.0.0 --port 8000 이런식으로 실행하면 컴퓨터를 켜 놓고있는 동안 외부에서 http://(내 ip주소):8000 이런식으로 접근이 가능하게 하고 싶은데(앞선 방법으론 시도해 봤는데 무한로딩이 뜨더라구요) 이런식의 배포는 불가능한지, 가능하면 어떻게 진행하면되는지 궁금합니다!

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
박원준 댓글 1 좋아요 0 조회수 2019

(실습) ORM 적용 - GET 단일 조회 API

해결됨

실전! FastAPI 입문

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@ 'localhos t' (using password: YES)") 이와같은 오류가 발생하는데 https://www.inflearn.com/questions/1009261/orm%EC%A0%81%EC%9A%A9-postapi-%EA%B0%95%EC%9D%98 이 분 글 보면 맨 마지막에 백그라운드에서 mysql이 실행되고있는걸 끄신걸로 해결하셨다는 것 같은데 그게 정확히 어떻게 하셨다는 건지 잘 모르겠고...ㅜㅜ 그게 저 오류랑 무슨 관계가 있었던건지도 궁금합니다. 일단 오류를 검색해보고 추론해본 생각으로는 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=todos -e MYSQL_DATABASE=todos -d -v todos:/db --name todos mysql:8.0 이걸로 만든 pw가 todos인 db에 접속하지 못한다는 내용인 것 같은데(이것도 맞는지 궁금합니다) 1. 위 문제 해결방법 2. 만약 pw가 문제라면 이를 연결하는 부분을 담당하는 코드(파일)가 connnection.py 의 내용인것 같은데 여기에 해당 db의 pw를 명시하는 부분이 있는지, 아니면 다른 곳에 위치하는지 궁금합니다(관련 글 찾아보던 중 해당 db의 pw자체를 없애라길래 없애지 않고 진행하는 방법은 없는건지 의문이 들어서 질문드립니다..!)

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
박원준 댓글 1 좋아요 0 조회수 454

Service를 Depends 사용하는 것에 대해 질문이 있습니다.

해결됨

실전! FastAPI 입문

(실습) 회원가입 API 구현 강의에서 질문이 있습니다. Depends가 Request 할때마다 객체를 생성하는 것으로 이해하고 있습니다. Depends를 테스트를 위해서 활용하는 것으로 이해했었는데, pyTest를 보면 mock.patch라는 기능으로 DI 없이 목킹을 잘 할 수 있는것으로 보았습니다. UserService를 Depends 처리하면, 요청마다 service를 생성할 것 같은데, 이러면 불필요한 생성과 소멸이 반복될 것 같은데, Depends를 쓰는게 좋을까요? 아니면 싱글톤으로 작성하는게 좋을까요?

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
김동현 댓글 1 좋아요 0 조회수 455

안녕하세요. fastapi 강의 수강 중입니다.

해결됨

실전! FastAPI 입문

안녕하세요. fastapi 강의 수강 중입니다. 섹션2에서 데이터베이스 생성과정 중 docker exec -it todos bash를 하면 Error response from daemon: Container c77ef59c10ff05ebd5ead765aa6f64ac185daa38214ad0fc5195750cace0b167 is not running 위와 같은 에로가 나오는데요, 나름대로 구글링을 해보니까 docker start를 사용해 도커 실행을 해주면한다해서 해보면 Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: address already in use 이러한 에러가 나옵니다. docker와 mysql을 연결하는 명령어에서 다 잘 다운로드되고 마지막에 docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: address already in use. 이런 에러가 뜨긴했는데 우선 넘어가보니 docker ps를 해보면 실행중인 컨테이너가 없습니다. 도커를 아예 처음 접하다보니 시작단계에서 어려움이 있는데 도움 부탁드립니다.

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
mjs4027 댓글 1 좋아요 0 조회수 570

레포지토리 패턴 강의에 pytest 오류가 뜹니다

해결됨

실전! FastAPI 입문

pytest 실행하면 FAILED tests/test_main.py::test_get_todos - assert 404 == 200 FAILED tests/test_main.py::test_get_todo - assert 404 == 200 FAILED tests/test_main.py::test_create_todo - AttributeError: 'NoneType' object has no attribute 'id' FAILED tests/test_main.py::test_update_todo - AssertionError: Expected 'undone' to be called once. Called 0 times. FAILED tests/test_main.py::test_delete_todo - AttributeError: <module 'api.todo' from 'C:\\Users\\user\\Desktop\\project\\todos\\src\\api\\todo.py'> does not have the attribute 'delete _todo' 라는 오류가 뜹니다...ㅠㅠ

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
inflearn1.modeep 댓글 1 좋아요 0 조회수 320

pydantic.error_wrappers.ValidationError 오류가 떠요

해결됨

실전! FastAPI 입문

지금 orm적용 get단일 조회 api 강의를 보고있는데 코드를 똑같이 쳤는데 마지막에 swagger 에서 입력 하면 pydantic.error_wrappers.ValidationError: 3 validation errors for ToDoSchema id field required (type=value_error.missing) content field required (type=value_error.missing) is_done field required (type=value_error.missing) 이 오류가 뜹니다..ㅠㅠ 무슨 오류인가요

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
inflearn1.modeep 댓글 1 좋아요 0 조회수 1403

ORM JOIN 강의를 따라하는 중 오류가...

해결됨

실전! FastAPI 입문

파이썬 콘솔에서 아래 오류가 발생했어요... 그래서 , pip install cryptography를 했지만 이미 설치되어 있었구요... (todos) C:\projects\todos>pip install cryptography Requirement already satisfied: cryptography in c:\projects\todos\lib\site-packages (41.0.3) Requirement already satisfied: cffi>=1.12 in c:\projects\todos\lib\site-packages (from cryptography) (1.15.1) Requirement already satisfied: pycparser in c:\projects\todos\lib\site-packages (from cffi>=1.12->cryptography) (2.21) 아래는 파이썬 콘솔창 user = session.scalar(select(User)) Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm Community Edition 2023.2.1\plugins\python-ce\helpers\pydev\pydevconsole.py", line 364, in runcode coro = func() File "<input>", line 1, in <module> File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\orm\session.py", line 2312, in scalar return self._execute_internal( File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\orm\session.py", line 2134, in execute internal conn = self._connection_for_bind(bind) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\orm\session.py", line 2001, in connection for_bind return trans._connection_for_bind(engine, execution_options) File "<string>", line 2, in connection for_bind File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\orm\state_changes.py", line 139, in _go ret_value = fn(self, arg, *kw) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\orm\session.py", line 1126, in connection for_bind conn = bind.connect() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3264, in connect return self._connection_cls(self) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\engine\base.py", line 145, in init self._dbapi_connection = engine.raw_connection() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\engine\base.py", line 3288, in raw_connection return self.pool.connect() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 452, in connect return ConnectionFairy. checkout(self) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 1267, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 716, in checkout rec = pool._do_get() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\impl.py", line 169, in do get with util.safe_reraise(): File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in exit raise exc_value.with_traceback(exc_tb) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\impl.py", line 167, in do get return self._create_connection() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 393, in create connection return _ConnectionRecord(self) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 678, in init self.__connect() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 902, in __connect with util.safe_reraise(): File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 147, in exit raise exc_value.with_traceback(exc_tb) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 898, in __connect self.dbapi_connection = connection = pool._invoke_creator(self) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\engine\create.py", line 637, in connect return dialect.connect(*cargs, **cparams) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\engine\default.py", line 615, in connect return self.loaded_dbapi.connect(*cargs, **cparams) File "C:\projects\todos\venv\lib\site-packages\pymysql\connections.py", line 358, in init self.connect() File "C:\projects\todos\venv\lib\site-packages\pymysql\connections.py", line 664, in connect self._request_authentication() File "C:\projects\todos\venv\lib\site-packages\pymysql\connections.py", line 976, in request authentication auth_packet = auth.caching sha2_password_auth(self, auth_packet) File "C:\projects\todos\venv\lib\site-packages\pymysql\_auth.py", line 266, in caching_sha2_password_auth data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key) File "C:\projects\todos\venv\lib\site-packages\pymysql\_auth.py", line 143, in sha2_rsa_encrypt raise RuntimeError( RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
member 댓글 1 좋아요 0 조회수 661

강좌의 풀 코드가 github에 공개된게 없나요?

해결됨

실전! FastAPI 입문

-학습을 하다가 중간 중간 막히는 곳이 있어.. 코드의 뭐가 잘못되었는지 확인하려는데.. 강의를 뒤로 돌아가서 영상으로 확인하려면 어렵습니다.. 강좌의 풀 코드가 github에 공개된게 없나요?

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
member 댓글 2 좋아요 0 조회수 661

인기 태그

인프런 TOP Writers

주간 인기글