일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- len
- enumerate
- or
- sum
- range
- decorator
- js
- DART
- lambda
- Algorithm
- 위코드
- index
- FOR
- slice
- WECODE
- count
- and
- iNT
- 파이썬
- SQL
- LOWER
- If
- MAX
- split
- join
- Sorted
- list
- Python
- map
- STR
- Today
- Total
목록나는 이렇게 학습한다/DB (19)
코드로 우주평화
Scalar 메서드는 쿼리를 통해 가져온 결과를, 단일 데이터 요소(ex. ORM)로 반환하는 데 사용하는 sqlalchemy.engine.Result 클래스의 메서드입니다. 이번 글에서는 SQLAlchemy에서 제공하는 Scalar 메서드들에 대해 알아보고, 각 메서드들의 적합한 예시를 함께 살펴보겠습니다. 🥸 scalar() scalar() 메서드는 쿼리 결과의 첫 번째 행의 값을 반환합니다. 만약 결과가 없으면 None을 반환합니다. scalar() 메서드는 주로 결과가 최대 하나만 있을 것으로 예상되거나, 여러 결과 중 첫 번째 값만 필요한 경우에 사용됩니다. 예시: 특정 조건을 만족하는 첫 번째 사용자의 이름 조회 first_user_name = session.query(User.name).fi..
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에서는 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') ..
인덱스란? 인덱스는 데이터베이스에서 테이블의 검색 성능을 높여주는 방법입니다. 관계형 데이터베이스에서는 B+Tree구조로 된 index를 사용하여 검색 속도를 향상시킵니다. 특히 select ~ where 쿼리처럼 특정 데이터를 찾을 때 빠른 속도로 검색할 수 있게 해 줍니다. 인덱스의 구조 인덱스는 Btree, B+tree(대부분), Hash, Bitmap로 구현할 수 있습니다. 인덱스를 생성하면 특정 컬럼(속성)의 값을 기준으로 정렬하여 데이터의 물리적 위치 주소와 함께 별도 파일에 저장합니다. 이때 특정 컬럼을 'search-key'라고 하고 실제 데이터의 물리적 위치 값을 'pointer'라고 합니다. 보통 인덱스는 테이블 크기의 10% 정도의 저장 공간을 차지합니다. 인덱스를 사용하는 이유 테이..
트랜젝션은 무엇인가요? 트랜젝션은 데이터베이스에서 수행하는 작업의 최소 단위로 데이터베이스의 ‘무결성’을 유지합니다. 트랜젝션은 하나 의상의 쿼리를 포함하고 ACID라는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야합니다. *무결성이란? 데이터의 일관성과 정확성을 지키는 것 원자성 Atomicity : 트랜젝션은 all or nothing, 전부 수행되거나 아니면 전부 수행되지 않거나 둘 중 하나여야 합니다. 즉, 원자성은 더 이상 쪼개질 수 없는 최소의 작업 단위를 의미합니다. 일관성 Consistency : 트랜젝션이 성공하면 언제나 일관성 있는 데이터베이스 상태를 유지해야함을 의미합니다. ex. 두 잔액의 합이 변하는 경우, 숫자필드가 문자필드로 변하는 경우 일관성이 없다고 할 수 있다..
RDB란? 관계형 데이터베이스는 엄격하게 정의된 스키마를 요구하는 테이블 기반 데이터 구조입니다. 엄격한 스키마로 데이터 중복이 없고, 데이터를 유지보수하는데 효율적입니다. 다만, 시스템이 커지면 join문이 복잡해지고 성능 향상을 하려면 스케일 업만 가능하여 비용이 크게 발생합니다. *스키마(schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조입니다. -위키- 그렇다면 NoSQL은 무엇일까요? NoSQL은 테이블 구조가 아닌 비정형 데이터를 저장할 수 있습니다. 유연하고 자유로운 데이터 구조이나 데이터 수정시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많은 경우에 유리합니다. 이 둘은 언제 사용하는게 좋을까요? RDB 데이터..
Table (=Relation) 하나의 셀에는 단일 값을 갖습니다. 각 row는 동일하지 않습니다. *column (=어트리뷰트) *row (=튜플, 레코드) col 1 col 2 row 1 row 2 기본키 (Primary key) 후보키 중에 선택한 유일성, 최소성을 만족하는 키입니다. Null값과 중복 값을 가질 수 없습니다. 슈퍼키 (Super key) 슈퍼키는 각 row를 식별할 수 있는 하나 혹은 그 이상 컬럼들의 집합입니다. (=유일성) 예시 :: (이름, 학번), (학번), (주민번호, 이름, 학번) 후보키 (Candidate key) 각 row를 유일하게 식별하여 Primary key로 사용할 수 있는 컬럼들을 말합니다. (=최소성) 예시 :: (학번), (주민번호) 대체키 (Altern..
삭제에는 두 가지 방법이 있다. 물리삭제는 실제 데이터베이스에서 제거하는 것이고, 논리삭제는 같은 테이블에 '삭제플레그'의 값을 변경하여 실제 삭제된 것과 동일하게 처리하는 방식이다.(이 외에도 논리삭제의 방법은 다양하다) 코드로 구현해 본다면? 깃헙 링크 (깃헙 링크에 들어가면 코드를 모두 볼 수 있다.) @app.route("/snack/", methods=["DELETE", "PUT"]) def delete(id): if request.method == "DELETE": SnackDelete.delete_physics(id) elif request.method == "PUT": SnackDelete.delete_logical(id) result_value = SnackDelete.select_all..
오늘 배운 것 명령어 기반(MySQL Moniter) GUI 기반(MySQL Workbench) 보통 명령어 기반 서버를 사용한다. 그 이유는 GUI에 들어가는 리소스를 아끼기 위해서이다. 서로 장단점이 있다. 맥락에 따라 사용할 것. MySQL Workbench 설치링크 : https://dev.mysql.com/downloads/workbench/ 서버가 있고 클라이언트가 별도로 있다. 서버를 중심으로 정말 많은 클라이언트가 있다. 서버를 사용하는 모든 앱, 웹, 데이터 분석 시스템들은 본질적으로 모두가 '클라이언트' 이다. 이 세상에는 어마어마하게 많은 MySQL 클라이언트가 있다. 자신에게 잘 맞는 클라이언트를 만나자! 수업을 마치며 다음 공부거리 SQL(관계형DB) > CRUD > READ > ..
오늘 배운 것 테이블 분리하기 앞선 글에 적은 것처럼 테이블 분리는 데이터를 좀 더 효율적으로 관리하기 위함. 아래는 실습 코드 MariaDB [(none)]> use daco; Database changed MariaDB [daco]> SHOW TABLES; +----------------+ | Tables_in_daco | +----------------+ | topic | +----------------+ 1 row in set (0.008 sec) MariaDB [daco]> RENAME TABLE topic TO topic_backup; Query OK, 0 rows affected (0.041 sec) # 테이블 이름 변경 방법 -> 리네임 테이블 (이름) 투 (새이름); MariaDB [da..