db 6

Sqlalchemy 에서 joinedload 할 때, The unique() method must be ... 에러 해결방법

Sqlalchemy 로 ORM 영역에서 join 을 하려고 할 때 joinedload 를 자주 사용한다. 그런데 joinedload 방식은 복수의 ORM 객체를 불러올 때에 다음처럼 에러가 발생할 수 있다. sqlalchemy.exc.InvalidRequestError: The unique() method must be invoked on this Result, as it contains results that include joined eager loads against collections 결론부터 말하자면 메시지의 내용대로 unique() 를 추가하면 된다. 아래처럼 말이다. ... res = await session.execute(stmt) res.scalars().all() # X res.sca..

SQLAlchemy에서의 비동기 쿼리 (feat. 2.0 Style)

AsyncSession을 통한 비동기 DB 통신 SQLAlchemy 에서는 DB와 비동기로 통신하기 위해서 AsyncSession 을 사용합니다. 그런데 AsyncSession을 사용하게 되면 ORM방식도 바뀌는데요. SQLAlchemy 공식문서에서는 2.0 스타일 쿼리를 사용한다고 합니다. Synopsis - ORM Using 2.0 style querying, the [AsyncSession] class provides full ORM functionality. Within the default mode of use, special care must be taken to avoid lazy loading or other expired-attribute access involving ORM relati..

SQLAlchemy를 이용해 csv파일 DB업로드 하는 방법(feat. psql)

CSV 대량의 데이터를 디비에 업로드하기 위해 사용되는 것 중에 하나가 csv파일입니다. csv파일은 데이터들이 콤마로 구분되어진 파일을 뜻하는데 엑셀이나 스프레드 시트 등에서 쉽게 변환시켜 다운로드할 수 있습니다. 오늘은 실습으로 krx 한국거래소에서 제공하는 종목 데이터를 디비에 업로드해보겠습니다. 먼저 krx 한국거래소에서 받은 종목 데이터 파일은 다음과 같습니다. (csv로 다운받을 수 있습니다) # stock.csv 종목코드,종목명,시장구분,소속부,종가,대비,등락률,시가,고가,저가,거래량,거래대금,시가총액,상장주식수 60310,3S,KOSDAQ,중견기업부,3445,15,0.44,3450,3485,3430,61292,211021945,159405362285,46271513 95570,AJ네트웍스,..

RDB와 NoSQL를 차이

RDB란? 관계형 데이터베이스는 엄격하게 정의된 스키마를 요구하는 테이블 기반 데이터 구조입니다. 엄격한 스키마로 데이터 중복이 없고, 데이터를 유지보수하는데 효율적입니다. 다만, 시스템이 커지면 join문이 복잡해지고 성능 향상을 하려면 스케일 업만 가능하여 비용이 크게 발생합니다. *스키마(schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조입니다. -위키- 그렇다면 NoSQL은 무엇일까요? NoSQL은 테이블 구조가 아닌 비정형 데이터를 저장할 수 있습니다. 유연하고 자유로운 데이터 구조이나 데이터 수정시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많은 경우에 유리합니다. 이 둘은 언제 사용하는게 좋을까요? RDB 데이터..

#3_Faker만 있으면 DB업로드가 두렵지 않아

페이커와의 만남 Faker는 디비에 가짜 데이터를 생성해주는 모듈이다. 맨 아래에 공식 페이지 링크를 남겨놓겠다. 만약 더 쉽게 사용하고 싶다면 구글에 검색해보라. 자주 사용하는 페이커 메서드를 잘 정리해 놓은 블로그들이 많다. 페이커는 1차 때 브랜치 팀에서 데이터를 넣을 때 사용했었다. 그 당시에 우리팀은 모든 상품과 데이터들을 직접 일일이 찾고 직접 입력하는 식으로 진행하였는데 (65개 상품을 입력하는데 하루를 모두 사용했었다..ㅜㅜ) 페이커를 이용한 브랜치 팀은 수십만 개의 데이터를 손쉽게 입력하였다. 그래서 이번에 우리는 페이커를 이용하여 디비에 데이터를 넣기로 하고 여러 글들을 보며 공부를 했다. 그리고 브랜치팀에서 이를 사용했던 도원님에게도 찾아가 조언을 구했다. 페이커는 생각보다 어렵지 않..

메모리, csv, DB입력, 그리고 데이터 반환

목표 - 메모리와 파일 시스템(csv)을 활용하여 DB에 데이터 입력 - 데이터 요청 시 벌크가 0이라면 해당 종목의 가장 최근 데이터 1개 반환 - 데이터 요청 시 벌크가 1이라면 해당 종목의 가장 최근 데이터 최대 100개 반환 문제 - 메모리에 데이터가 100개 이상이 되면 csv파일로 선입선출 방식을 통해 이동해야 함 - csv파일의 데이터는 한 번에 DB로 이동해야 함 - 유저가 요청하면 종목 코드에 맞는 데이터를 1개 또는 최대 100개까지 가져와야 함 행동 - 리스트 안에 데이터가 100개가 된다면 pop()을 이용해 선입선출로 csv로 이동하는 로직 구현 # ------------------------ # 메모리를 활용한 데이터 관리 코드 args = [] # 최근 데이터는 100개 까지 ..

Log/Today 2022.01.17