Windows를 사용하면서 fastAPI 서버를 WSL(Windows Subsystem for Linux)에서 구동하고, MySql 서버를 Windows상에서 구동하는 경우에는 fastAPI를 통해서 MySql에 접속할 때 오류가 발생하는 경우가 있을 수 있습니다. 이는 fastAPI가 설치된 WSL와 MySql이 설치된 Windows가 별도의 머신으로 구성되어 서로의 localhost가 다르기 때문에 발생하는 문제입니다. 따라서 fastAPI에서 접속할 때 localhost가 아닌 Windows의 ip를 사용하여 접속(cmd창에서 ipconfig를 통해 확인)하셔야 합니다. 올바른 ip를 입력하시더라도 접속이 거부될 수 있는데, 이는 MySql에 접속하는 계정명이 "root"가 아니라 "root@localhost"이기 때문일 수 있습니다. 이를 해결하기 위해서는 아래의 sql문으로 새로운 유저 ID와 패스워드를 지정한 다음 이를 통해 접속하시면 됩니다. CREATE USER 'fastapi'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON . TO 'fastapi'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
Event Loop에서 질문이 있습니다. 저는 await task()을 하면 작업 큐에 등록된 후 차례가 되면 실행이 되는 것으로 이해를 하였는데 그러면 다음과 같은 코드에서, import asyncio async def inner_task(): print(f"inner_task 시작") await asyncio.sleep(1) print(f"inner_task 완료") return "inner 결과" async def outer_task(n): print(f"outer_task {n} 시작") results = await inner_task() print(f"outer_task {n} 완료") return results async def main(): await asyncio.gather(outer_task(1), outer_task(2), outer_task(3)) asyncio.run(main()) 먼저 큐에 등록된 outer_task들이 먼저 동작을 하는 것으로 예상을 하였지만 먼저 들어간 outer_task보다 내부의 inner_task가 먼저 동작을 하였습니다. 하지만 outer_task에 gather을 사용하여 여러 task를 await하면, 모든 outer_task 이후에 작동을 하는 데 혹시 작동원리가 다를까요?
안녕하세요, 권철민 강사님. FastAPI로 실제 서비스를 운영 중인 주니어 개발자입니다. EmailStr 이나 max_length=40 같은 경우, 프론트엔드에서 입력을 제한하더라도 백엔드에서 예외 처리를 한다고 가정할 때, Pydantic의 검증 오류는 모두 422 에러로 반환됩니다. 이 경우, 클라이언트에서 특정 오류(예: 이메일 형식 오류, 최대 길이 초과 등)를 구분하기 어려운 문제가 있습니다. 클라이언트에서 특정 오류에 대해 모달을 띄우는 등의 처리가 필요할 때, Pydantic 검증 대신 비즈니스 로직에서 200 응답을 반환하고, 약속된 에러 코드를 통해 오류를 구분하는 방식이 적절할까요? 정답은 없지만 어떻게 처리하는게 맞을까요?
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요 . 스크린샷이 안되서 안타깝긴 한데 강의상의 inflearn-teaching-backend-drf가 어디있을까요?
../src 경로에서 sqlite3 sql_app.db 실행 및 접속 이후 SQLite version 3.43.2 2023-10-10 13:08:14 Enter ".help" for usage hints. sqlite> .tables sqlite> .tables sqlite> post 확인이 안됩니다
cms-1 | /src/ entrypoint.sh : line 7: /src/.venv/bin/activate: No such file or directory cms-1 | Waiting for database to be ready... cms-1 | Waiting for database to be ready... cms-1 | /src/ entrypoint.sh : line 7: /src/.venv/bin/activate: No such file or directory cms-1 | /src/ entrypoint.sh : line 7: /src/.venv/bin/activate: No such file or directory cms-1 | Waiting for database to be ready... cms-1 exited with code 1 cms-1 | Waiting for database to be ready... cms-1 | /src/ entrypoint.sh : line 7: /src/.venv/bin/activate: No such file or directory cms-1 | Waiting for database to be ready... cms-1 | /src/ entrypoint.sh : line 7: /src/.venv/bin/activate: No such file or directory cms-1 | /src/ entrypoint.sh : line 7: /src/.venv/bin/activate: No such file or directory Lightsail ubuntu에서 docker compose up 시 위와 같이 entrypoint 쉘에서 /src/.venv/bin/activate 못찾는 에러가 발생합니다... 미리 파이썬 가상환경을 만들어 놓아도 에러가 발생해요..ㅠㅠ
안녕하세요! fastapi 입문으로 강사님 강의를 듣게되어 영광입니다. 강의 내용 따라 진행은 잘되고 있으나 강사님이 구현하신 class SubCategoryCreate(BaseModel): model_config = ConfigDict(from_attributes=True) subcategory_name: str category_id: int model_config = { "json_schema_extra": { "example": { "subcategory_id": 1, "subcategory_name": "수도", "category_id": 1 } } 이렇게 구현을 하셨는데 model_config 변수가 두번사용 되어 마지막에 사용된 model_config 값이 첫번째 ConfigDict(from_attributes=True) 값을 덮어 씌워 첫번째로 사용된 model_config 변수의 역할이 없어지는것이 아닌가 하여 의문이 들어 왜 같은 변수명으로 덮어 씌우는지 궁금하여 질문 드립니다.
안녕하세요! Nest에서 Fast API로 컨버젼중입니다. Nest는 Many to Many, Many to One 등등 이러한 연관관계를 설정해서 테이블을 생성합니다. Fast API에서는 아래 코드처럼 단순히 join만 걸어두고 사용하면 되는 걸까요?? class User(Base): __tablename__ = "user" id = Column(Integer, primary_key=True, index=True) username = Column(String(256), nullable=False) password = Column(String(256), nullable=False) todos = relationship("ToDo", lazy="joined")
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요. - 먼저 유사한 질문이 있었는지 검색해보세요 - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님. 안녕하세요. 현재FAST_API를 구성하여 uvicorn app.main:app --reload --host 0.0.0.0 --port 8010 위와 같이 로컬서버를 열었습니다. 사내에서 프론트엔드쪽에서 제 서버로 접속을 시도하는데 공용 Wifi를 쓰고 있어서 IP주소만 192.168.0.x:8010으로 프론트엔드쪽에 전달을 했습니다. 하지만 프론트쪽에서는 제 로컬 서버로 접속이 안되고 계속 로딩만 되고 있습니다. 로컬에서 swagger를 열어서 서버테스트를 했을 때에는 전혀 문제가 없었는데 현재 문제는 공용 라우터 아래 무선 랜을 잡아서 쓰고 있는 두 컴퓨터간의 통신이 안되고 있습니다... 하지만 프론트에서 index.html을 5500포트로 열어서 공유한 것을 잘 열립니다. 정말 gpt, claude를 쪼아서 물어봤는데도 계속 똑같은 이야기, 방화벽 설정에서 인바운드 포트설정이야기만 합니다 혹시 어떤 문제인지 좀.. 도와주십시요. 내일 대표님 앞에서 프로젝트 시연을 해야하는데 지금 ...큰 문제입니다.
Sqlalchemy 라이브러리와 Python-oracledb 드라이버를 이용해 DB 연결을 하려고 하는데 쉽지 않습니다.. 저는 service name 정보만 있고 SID 정보는 없는 상태인데, 공식문서를 참고해 아래와 같이 접속을 시도해도 에러가 발생합니다..ㅠ 에러 내용 ) File "src/oracledb/impl/thin/transport.pyx", line 289, in oracledb.thin_impl.Transport.send_oob_break OSError: [Errno 22] Invalid argument DB 접속 코드 ) import sqlalchemy engine = sqlalchemy.create_engine("oracle+oracledb://MY_USERNAME:MY_PASSWORD@MY_DB_HOST:MY_DB_PORT/?service_name=MY_DB_SERVIC_NAME") disable_oob=True로 하면 될 것 같은데, sqlalchemy에서 어떻게 해당 값을 세팅해야 하는지 모르겠습니다...ㅠ 따로 설정파일을 만들어야 하나요?ㅠㅠ
안녕하세요 강의를 듣던 도중 궁금한 것이 생겨 질문드립니다 섹션 2에서의 PATCH API는 else문으로 is_done=True를 is_done=False로 바꾸는 처리를 따로 하지않아 True 상태를 False로 못바꾸는 반면에 섹션 3에서의 PATCH API는 Ture를 False로 바꿀수 있다고 이해했는데 혹시 맞을까요?? 웹 개발을 처음 공부하다 보니 이해를 잘 못했나 해서 질문드렸습니다
안녕하세요 nest로 개발을 진행하다가 fast API로 전향하려는 개발자 입니다. 저와 같은 경우는, TypeORM을 사용하고 있었습니다. TypeORM은 아래 코드와 같이 DB와 연결해 놓고 @Entity 어노테이션을 사용하면 테이블이 자동 생성됩니다. 강의를 보면 테이블을 생성하는 쿼리를 console로 만들어서 DB SQL에 직접 작성하는 것으로 확인됩니다. FAST API는 NEST처럼 테이블이 자동 생성되는 기능이 없는 걸까요?? 또한 @ManyToMany @ManyToOne과 같은 어노테이션을 사용하면 연관관계가 쉽게 맵핑되어 별도의 join 쿼리 없이도 조회,수정,삭제가 가능합니다. 이러한 부분 또한 FAST API는 지원하는 기능이 없는 걸까요?? import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class PostsModel { @PrimaryGeneratedColumn() //알아서 값을 1씩 증가하는 것을 만들어 준다. id: number; @Column() author: string; @Column() title: string; @Column() content: string; @Column() likeCount: number; @Column() commentCount: number; } import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { PostsModule } from './posts/posts.module'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ PostsModule, TypeOrmModule.forRoot({ //forRoot -> typeOrm과 nestJs을 연결할 수 있는 연결고리를 만드는 것 type: 'postgres', host: '127.0.0.1', port: 5432, username: 'postgres', password: 'postgres', database: 'postgres', entities: [], //데이터베이스와 연동될 모델들 synchronize: true, //nestJS에서 작성하는 typeOrm 코드와 데이터베이스싱크를 자동으로 맞출 것이냐(개발에서는 true, 프로덕션에서는 false) }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
안녕하세요 테스트 코드 사용 중 오류가 잡히지 않아서 문의 드립니다. 강의에서 설명해주신 것처럼 아래와 같이 코드를 작성했지만 오류가 발생합니다. 어떻게 해야 할까요? from fastapi.testclient import TestClient from main import app # api들이 있는 app을 검증할 클라이언트 생성 client = TestClient(app=app) def test_health_check(): # api 요청 response = client.get("/") # 반환 값 검증 assert response.status_code == 200 assert response.json() == {"ping": "pong"} 아래는 오류 내용 입니다. (fastapi_orm) C:\Users\User\Desktop\Fast_API(ORM)\code\src>pytest ============================================================================= test session starts ============================================================================= platform win32 -- Python 3.10.16, pytest-8.3.5, pluggy-1.5.0 rootdir: C:\Users\User\Desktop\Fast_API(ORM)\code\src plugins: anyio-4.8.0 collected 0 items / 1 error =================================================================================== ERRORS ==================================================================================== _____________________________________________________________________ ERROR collecting tests/test_main.py _____________________________________________________________________ tests\test_main.py:5: in <module> client = TestClient(app) ..\..\..\..\anaconda3\envs\fastapi_orm\lib\site-packages\starlette\testclient.py:399: in __init__ super().__init__( E TypeError: Client.__init__() got an unexpected keyword argument 'app' =========================================================================== short test summary info =========================================================================== ERROR tests/test_main.py - TypeError: Client.__init__() got an unexpected keyword argument 'app' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ============================================================================== 1 error in 0.86s ===============