묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! FastAPI 입문
Service를 Depends 사용하는 것에 대해 질문이 있습니다.
(실습) 회원가입 API 구현 강의에서 질문이 있습니다.Depends가 Request 할때마다 객체를 생성하는 것으로 이해하고 있습니다.Depends를 테스트를 위해서 활용하는 것으로 이해했었는데, pyTest를 보면 mock.patch라는 기능으로 DI 없이 목킹을 잘 할 수 있는것으로 보았습니다.UserService를 Depends 처리하면, 요청마다 service를 생성할 것 같은데, 이러면 불필요한 생성과 소멸이 반복될 것 같은데, Depends를 쓰는게 좋을까요? 아니면 싱글톤으로 작성하는게 좋을까요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
from config import get_secret 질문
"05-scraping.py" 파일에from config import get_secret --> 이 코드가 있는데요,제가 Linux에서 이 파일을 실행해 보면 위 코드에서 아래 에러가 납니다. 뭐가 문제인지요?ImportError: cannot import name 'get_secret' from 'config' (/home/sean2/.pyenv/versions/3.8.17/lib/python3.8/site-packages/config/__init__.py)
-
해결됨실전! 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를 해보면 실행중인 컨테이너가 없습니다. 도커를 아예 처음 접하다보니 시작단계에서 어려움이 있는데 도움 부탁드립니다.
-
해결됨실전! FastAPI 입문
레포지토리 패턴 강의에 pytest 오류가 뜹니다
pytest 실행하면 FAILED tests/test_main.py::test_get_todos - assert 404 == 200FAILED tests/test_main.py::test_get_todo - assert 404 == 200FAILED 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'라는 오류가 뜹니다...ㅠㅠ
-
해결됨실전! FastAPI 입문
pydantic.error_wrappers.ValidationError 오류가 떠요
지금 orm적용 get단일 조회 api 강의를 보고있는데 코드를 똑같이 쳤는데 마지막에 swagger 에서 입력 하면 pydantic.error_wrappers.ValidationError: 3 validation errors for ToDoSchemaid field required (type=value_error.missing)content field required (type=value_error.missing)is_done field required (type=value_error.missing) 이 오류가 뜹니다..ㅠㅠ 무슨 오류인가요
-
해결됨실전! FastAPI 입문
ORM JOIN 강의를 따라하는 중 오류가...
파이썬 콘솔에서 아래 오류가 발생했어요...그래서 , pip install cryptography를 했지만 이미 설치되어 있었구요...(todos) C:\projects\todos>pip install cryptographyRequirement 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 executeinternal conn = self._connection_for_bind(bind) File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\orm\session.py", line 2001, in connectionfor_bind return trans._connection_for_bind(engine, execution_options) File "<string>", line 2, in connectionfor_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 connectionfor_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 doget 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 doget return self._create_connection() File "C:\projects\todos\venv\lib\site-packages\sqlalchemy\pool\base.py", line 393, in createconnection 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 requestauthentication auth_packet = auth.cachingsha2_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
-
해결됨실전! FastAPI 입문
강좌의 풀 코드가 github에 공개된게 없나요?
-학습을 하다가 중간 중간 막히는 곳이 있어.. 코드의 뭐가 잘못되었는지 확인하려는데..강의를 뒤로 돌아가서 영상으로 확인하려면 어렵습니다..강좌의 풀 코드가 github에 공개된게 없나요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
파이썬 코루틴활용 영상 질문
코드를 실행해보니까 naver쪽 데이터만 불러오는 것같습니다. 속도도 너무 빠르고 뭐가 문제일까요? 그리고 할때마다 시간이 다르네요 ㅠㅠ aiohttp 버전도 3.7.3으로 설치했습니다
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
가상환경 설정 질문
가상환경 들어가서 pytho hello.py실행해도 파일이 없다고 오류가 뜨네요. 처음에 들어갔을때는 앞에 가상환경 venv가 안떠서 powershell하나더 만드니까 저렇게 앞에 venv가 떴습니다. 이렇게 하는거 맞을까요 그리고 이거랑 무슨 차이인지도 궁금합니다.
-
해결됨실전! FastAPI 입문
ModuleNotFoundError: No module named 'database'
안녕하세요. 강의 잘 듣고 있습니다.데이터베이스 연결 강의에서 파이썬 콘솔에서 from database.connection import SessionFactory를 실행할 때 자꾸 모듈을 찾을 수 없다고 나옵니다.sys.path.append를 통해 경로를 추가해주었는데도 찾지를 못하고 있습니다. 해결방법을 알 수 있을까요? 감사합니다!
-
해결됨실전! FastAPI 입문
혹시 강의처럼 잘 안되시는분들을 위해 글을 남깁니다(09.완강)
안녕하세요 저는 23년 9월 수강 완료한 수강생인데요windows10 환경에서 pycharm 을 이용해 해당 강의 수강하며혹시 저와 같은 이유로 진행이 어려우신 분들을 위해 글을 씁니다 일단 pycharm 버전을 떠나서강의 초반부 윈도우 환경에서 python -m venv todos 로 폴더를 만들고강의와 같이 todos 폴더 안에 src 폴더를 만들면서 source root 를 설정하고 진행시강의 내용처럼 auto import, import 입력시 IDE 에서 도와주는 코드 어시스트 기능을전혀.. 사용할수가 없었습니다. ㅜ(추측컨데 windows 환경이라서 그런건지는 확실치 않지만, venv(가상환경) 내부에 src 를 만들어서 이용하기 때문에 interpreter 충돌이 일어나는게 아닌지.. 싶습니다제 경험으로는 강의 처럼 todos 라는 venv 로 가상환경을 만들고interpreter 세팅을 todos/Script/python.exe 설정을 했을때 온전히 강의처럼 진행이 안됐었습니다.)그래서 해당 사진처럼 cmd에서 venv 명령이 아닌파이참 초반에 open project 할때 new project 를 선택해서위와 같이 설정하고project tree 구조를 위와같이 잡으니 이후 진행이 강의 내용과 똑같이 진행이 되어완강할수 있었습니다. 아마 위와같은 설정으로 new project 하시면 초반에 todos/venv 폴더만 있으실 겁니다 그러면 venv 폴더는 건들지 마시고 todos/src 폴더만 새로이 생성한 후 이후 진행은강의 처럼 똑같이 진행 하시면 되겠습니다.% 강의 후반부 쯤 Redis 를 사용하게 되는데 pycharm 에서 import 하기 전pip install redis 설치해야 그후 부터 python console 에서 redis import 가능합니다 %
-
해결됨실전! FastAPI 입문
pytest시 import error
안녕하세요 선생님! 강의 잘 듣고 있습니다.pytest진행하는 과정에서 똑같이 directory구조 만들고 pytest를 명령어로 입력했더니 ImportError while importing test module: test_main.py 절대경로Hint: make sure your test modules/packages have valid python names.라는 Error와 함께 pytest가 진행되지 않아서 해결책좀 질문드리고 싶습니다 ㅠ. 참고로 SwaggerUI로 API test를 해보면 잘 작동합니다!
-
해결됨실전! FastAPI 입문
ORM적용 POSTAPI 강의
RecursionError: maximum recursion depth exceeded 오류가 발생하네요.찾아보니 너무 많은 라이브러리를 임포트해서 그렇다는데 방법이 없을까요;;
-
해결됨실전! FastAPI 입문
[질문] api handler 매개변수 정리
안녕하세요, 강의 잘 듣고 있습니다.Fast API에서 api handler 매개변수로url path parameterurl query parameterrequest body 이렇게 3가지가 올 수 있는 것 같은데, 내부적으로 파이썬 **kwargs를 사용해서 순서에 상관없이 매개변수 이름을 통해서 구분을 하는걸까요?사실 공식문서를 통해서 직접 찾아서 공부하면 베스트인데, 질문을 통해서 전문가한테 빠르게 배워서 정리하는 것도 좋은 방법같아서 괜찮으시면 관련 내용을 정리해주실 수 있을까요? 특히 강의에서 Pydantic BaseModel을 상속한 클래스를 타입힌트로 하면 내부적으로 request body 매개변수로 알아서 처리하는 건지, 또 Body를 통해서 request body의 인자를 받던데 ...이랑 embed=True의 의미 등 이런 부분들도 강의에서 설명이 따로 없어서 정리해주시면 도움이 될 것 같습니다.감사합니다.
-
해결됨실전! FastAPI 입문
HTT
HTTP Response 처리하는 강의에서 7:53초, response 타입을 -> ~으로 정의하는 부분에서 오류가 발생하내요;; 왜이런지
-
해결됨실전! FastAPI 입문
섹션2. HTTP Response 처리 에서 from_orm 관련 오류가 나서 질문드립니다.
섹션2. HTTP Response 처리 에서 from_orm 관련 오류가 나서 질문드립니다.The from_orm method is deprecated; set model_config["from_attributes"]=True and use model_validate instead. 라는 에러와 함께 서버를 작동시켜도 Swagger에서 GET함수가 반영되지 않고 status code 500으로 Error가 발생하는데 해결법을 혹시 아실까요? 구글링을 해봐도 정보가 잘 나오지 않네요ㅠif order and order == "DESC": return ListToDoResponse( todos=[ToDoSchema.from_orm(todo) for todo in todos[::-1]] )
-
해결됨실전! FastAPI 입문
파이썬 가상환경 질문
파이썬 가상환경 구축영상에서, 터미널에서 가상환경 구축하셨는데, 어느 터미널에서 실행하는지도 안알려주시고 알려주시면 좋겠습니다. 설명이 너무 빈약하네요...;; 일단 파이참은 설치했는데 어떻게 하는지 자세히 설명 부탁드립니다.
-
해결됨실전! FastAPI 입문
api 데이터 모델링 시, pandantic?
강의를 보고 문서를 보고 정리하는 과정 중에 헷갈리는 점이 있어서 질문 드려봅니다. 저희 코드에서 schema안에 response , request 의 스키마는pydantic의 basemodel로 설계가 되어있고 ,database Orm에는 유저 모델과 todo를 만들었는데, 이 부분은 sql alcemy의 base declaritve를 사용한걸로 기억합니다.(모델 폴더와 스키마 폴더가 헷갈립니다..)백엔드 설계를 할때, 데이터 구조 그리고 erd등 관계도 설정 후에 모델링을 fast api로 할때는 , 저희 강의 때 한 것처럼 orm안에 해준 것처럼 하는 방식일까요? pydantic으로 schema(폴더명 때문에 헷갈리는 부분일 수도.)에서는 단순히 req,res 에 있어서 타입을 검증하기 위한 모델을 설계한 것이라고 보면 될까요? 강의를 듣고, 실제로 백엔드 api 만들어서 프로젝트 구성해보려 하는 과정에서 질문이 있어서 드려봅니다. 1 to many는 아래처럼 하고 , m to m인 경우도 아래 와 비슷한 형식으로 모델링을 하는 걸까요? 강의에서는 맛보기로 간단하게 소개형식이지만 실제로 프로젝트를 한다고 했을땐, 어떻게 작성하는지 궁금합니다.user_id = Column(Integer, ForeignKey("user.id")) Repository 는 mvc의 컨트롤러라고 생각하면 될까요? 모델링 할때, SQLModel로 하는 방법과 강의에서 나온 Base상속방법의 차이는 무엇일까요? 구글링해도 잘 나오지 않네요.. 둘다 상관없다면, 어떠한 것이 선호가 되는지 왜 강의에서는 base상속을 했는지 이유가 있으실까요? SQL Model도 fastapi 저자가 만든 것인고 pydantic기반이라고 들었습니다. 번외로.. 저희가 배운걸로는 declartive 를 상속받는데, 아래와 같은 형식으로도 모델링을 하기도 하나요? from sqlmodel import SQLModel, Field class User(SQLModel, table = True): nickname: str = Field(primary_key = True) password: str
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
pydantic import error
아래 질문자님께서도 글을 남기셨듯, 저 또한 이러한 에러가 계속 발생합니다. pydantic.errors.PydanticImportError: pydantic.datetime_parse:parse_datetime has been removed in V2. 이 문제는 odmantic import 과정에서 발생하고 있으며.V1에서는 가능했지만 V2에서 제거되면서 발생되는 문제라고 생각됩니다. odmantic의 버전을 낮춰보았으나 반응이 없었고,pydantic의 현 버전이 2.3이기에 1.10.12버전으로 낮춰보아도 현 문제가 지속되고 있습니다. 교육자료의 requirement.txt를 열어봐도 사용된 라이브러리만 명시되어 있으뿐 버전에 대한 부분은 없어서 진행에 어려움을 겪고 있습니다. 다시 한번 도움을 부탁드립니다. 감사합니다!
-
해결됨실전! FastAPI 입문
TODO 테스트 코드 작성
저의 경우는 아래와 같이 해주어야 테스트 코드가 통과됩니다. 그 이후는 sql 도커의 데이터가 5개가 있어서 실제는 5개이기 때문이라 생각되어지는데요.강의를 보면서 테스트코드 감을 못잡앗는데, 궁금한 점은 테스트 코드에서 user 변수에다가 id1 이고 test란 이름의 유저네임을 넣어주고 거기다가, todos를 목업으로 2개를 넣어줬는데, 왜 마지막에 assert할때는 user.todos에 넣어준 배열로 하는게 아닌 실제 db들어간 5개의 데이터로 assert로 체크하더라구요. 그러면 아래 mocker patch해준 부분이 제대로 안먹는건가요? 흠..user = User(id=1, username="test", password="hashed") user.todos = [ ToDo(id=1, contents="FastAPI Section 0", is_done=True), ToDo(id=2, contents="FastAPI Section 1", is_done=False), ] mocker.patch.object(UserRepository, "get_user_by_username", return_value=user) def test_get_todos(client, mocker): access_token: str = UserService().create_jwt(username="test") headers = {"Authorization": f"Bearer {access_token}"} user = User(id=1, username="test", password="hashed") user.todos = [ ToDo(id=1, contents="FastAPI Section 0", is_done=True), ToDo(id=2, contents="FastAPI Section 1", is_done=False), ] mocker.patch.object(UserRepository, "get_user_by_username", return_value=user) # order=ASC response = client.get("/todos", headers=headers) assert response.status_code == 200 assert response.json() == { "todos": [ {"id": 1, "contents": "FastAPI Section 0", "is_done": True}, {"id": 2, "contents": "FastAPI Section 0", "is_done": True}, {"id": 3, "contents": "string", "is_done": True}, {"id": 4, "contents": "string", "is_done": True}, {"id": 5, "contents": "string", "is_done": True}, ] } # order=DESC response = client.get("/todos?order=DESC", headers=headers) assert response.status_code == 200 assert response.json() == { "todos": [ {"id": 5, "contents": "string", "is_done": True}, {"id": 4, "contents": "string", "is_done": True}, {"id": 3, "contents": "string", "is_done": True}, {"id": 2, "contents": "FastAPI Section 0", "is_done": True}, {"id": 1, "contents": "FastAPI Section 0", "is_done": True}, ] }