나는 이렇게 학습한다/DB20 Supabase의 RPC를 활용해 실시간 카운터 기능 구현하기 제가 최근에 만든 서비스는 홈 화면에 사용자들의 이용 수 보여주고 있습니다.이처럼 사용자의 이용 수를 카운트하여 보여주고 흥미를 끄는 방식이 있는데요. 이런 카운트 기능을 어떻게 구현할까 고민하다 supabase의 RPC를 이용해 구현해 보았습니다. 이 글은 그 과정에 대해 설명하는 글입니다. 이 글을 끝까지 읽으면 꼭 카운터가 아니더라도 비슷한 상황에서 적절히 사용하실 수 있을 겁니다. 사용자가 버튼을 클릭하면 숫자를 올려줘처음에는 이 기능을 이용 중에 생성된 DB row의 수를 기준으로 숫자를 카운트했습니다. 하지만 이 row는 서비스를 끝까지 이용했을 때에만 생성되기 때문에 중간에 이탈한 사용자의 수는 숫자로 카운트되지 않았죠.. 그래서 버튼을 클릭하자마자 숫자가 올라가도록 수정했습니다. 먼저 .. 2024. 9. 14. Sqlalchemy 의 scalar 메서드들을 살펴보자 Scalar 메서드는 쿼리를 통해 가져온 결과를, 단일 데이터 요소(ex. ORM)로 반환하는 데 사용하는 sqlalchemy.engine.Result 클래스의 메서드입니다. 이번 글에서는 SQLAlchemy에서 제공하는 Scalar 메서드들에 대해 알아보고, 각 메서드들의 적합한 예시를 함께 살펴보겠습니다. 🥸 scalar() scalar() 메서드는 쿼리 결과의 첫 번째 행의 값을 반환합니다. 만약 결과가 없으면 None을 반환합니다. scalar() 메서드는 주로 결과가 최대 하나만 있을 것으로 예상되거나, 여러 결과 중 첫 번째 값만 필요한 경우에 사용됩니다. 예시: 특정 조건을 만족하는 첫 번째 사용자의 이름 조회 first_user_name = session.query(User.name).fi.. 2024. 1. 24. 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.. 2023. 8. 30. SQLAlchemy _ ForeignKey 로 연결된 개체 한 번에 삭제하기 SQLAlchemy에서는 cascading 옵션을 활용하여 관계된 개체(Entity)를 한 번에 삭제할 수 있다. 방법 1. 부모 relationship 에서 cascade 매개변수 지정 두 테이블 간의 관계를 정의할 때, 상위 개체와 하위 개체가 함께 삭제되도록 cascade 매개변수를 지정할 수 있다. from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy.orm import relationship class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) children = relationship('Child', cascade='delete') .. 2023. 3. 24. 데이터베이스에서 인덱스는 왜 사용하는 걸까? 인덱스란? 인덱스는 데이터베이스에서 테이블의 검색 성능을 높여주는 방법입니다. 관계형 데이터베이스에서는 B+Tree구조로 된 index를 사용하여 검색 속도를 향상시킵니다. 특히 select ~ where 쿼리처럼 특정 데이터를 찾을 때 빠른 속도로 검색할 수 있게 해 줍니다. 인덱스의 구조 인덱스는 Btree, B+tree(대부분), Hash, Bitmap로 구현할 수 있습니다. 인덱스를 생성하면 특정 컬럼(속성)의 값을 기준으로 정렬하여 데이터의 물리적 위치 주소와 함께 별도 파일에 저장합니다. 이때 특정 컬럼을 'search-key'라고 하고 실제 데이터의 물리적 위치 값을 'pointer'라고 합니다. 보통 인덱스는 테이블 크기의 10% 정도의 저장 공간을 차지합니다. 인덱스를 사용하는 이유 테이.. 2022. 3. 19. 트랜젝션이란? 트랜젝션은 무엇인가요? 트랜젝션은 데이터베이스에서 수행하는 작업의 최소 단위로 데이터베이스의 ‘무결성’을 유지합니다. 트랜젝션은 하나 의상의 쿼리를 포함하고 ACID라는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야합니다. *무결성이란? 데이터의 일관성과 정확성을 지키는 것 원자성 Atomicity : 트랜젝션은 all or nothing, 전부 수행되거나 아니면 전부 수행되지 않거나 둘 중 하나여야 합니다. 즉, 원자성은 더 이상 쪼개질 수 없는 최소의 작업 단위를 의미합니다. 일관성 Consistency : 트랜젝션이 성공하면 언제나 일관성 있는 데이터베이스 상태를 유지해야함을 의미합니다. ex. 두 잔액의 합이 변하는 경우, 숫자필드가 문자필드로 변하는 경우 일관성이 없다고 할 수 있다.. 2022. 3. 18. 이전 1 2 3 4 다음