[Async-SQLModel] SQLModel서 비동기 프로그래밍시 발생하는 문제의 대안
·
프로그래밍/파이썬
## SQLModel서 발생하는 비동기 이슈: MissingGreenlet 파이썬 비동기 프로그램을 작성할때 SQLAlchemy 혹은 SQLModel를 사용하다보면 MissingGreenlet을 자주 접하게 된다. Model 객체의 필드를 접근할때 데이터베이스에서 값을 갱신해야 하는 경우가 있다. 이 작업은 기본적으로 암시적인 IO를 발생시키는데, 비동기 프로그램 안에서는 이때 MissingGreenlet에러를 터뜨린다. 아래 두개의 예제에서 자세한 경우를 설명하겠다. 첫번째 경우는 만료(expired)된 필드를 가져올때 값을 갱신하는 상황이다. from typing import Optional from sqlmodel import Field, SQLModel from sqlmodel.ext.asynci..
파이썬, if문보다 try~expect이 더 좋다?
·
프로그래밍/파이썬
파코기(파이썬 코딩의 기술) 책을 읽다가 Better way 16에서 내가 알고 있던 것과 다른 내용이 나와서 글을 쓴다. 😵‍💫 발단 counter 딕셔너리의 값을 증가시키는 코드를 짜려고 한다. 아래 두 후보 중 어느 것이 맞을까? # 1번 후보, counter[key]에 +1을 하기 전에 key가 있는지 확인하고 간다. if key in counter: counter[key] = 0 else: counter[key] += 1 # 2번 후보, counter[key]에 +1을 하고 없다고 에러가 뜨면 예외를 처리한다. try: counter[key] += 1 except KeyError: counter[key] = 1 이 책을 보기 전의 나는 "당연히 1번이지! 예외는 말이야~ 원래 오래 걸린다~~ 이..
MongoDB의 Date와 python의 datetime
·
프로그래밍/파이썬
1️⃣ 발단 Imgenie 서비스에 mongo db를 달아주고 있던 중, 테스트 코드에서 아래와 같은 오류가 발생했다. 이 오류는 아래 함수에서 발생한 것인데, 저장 전의 auth 객체와 와 실제 db에 저장된 found 객체가 다르다는 것이였다. def test_find_by_refresh_token(self): user = self.__user() auth = self.__auth(user, "123") found = self.auth_repository.find_by_refresh_token(auth.refresh_token) assert auth == found ## 여기서 발생! 2️⃣ 이유 파이썬 datetime의 마이크로초의 값이 다른것이 문제인데 found객체의 마이크초 일부가 없는 걸 보..
2jun0
'프로그래밍/파이썬' 카테고리의 글 목록