📌 EdgeQL 반복 삽입 코드 완전 분석
🎯 목표
EdgeDB에서 FOR ... IN ... UNION 문법을 사용해 수만 개의 데이터를 한 번에 삽입하는 방법과, 그 과정에서 사용되는 int64의 개념을 함께 이해합니다.
✅ 전체 코드
FOR x IN range_unpack(range(1, 100000)) UNION (
INSERT Movie {
title := "Movie " ++ <str>x
}
);
🧩 코드 분석
1. range(1, 100000)
- 의미: 1부터 99,999까지의 정수 범위 객체 생성
- Python의 range()와 유사하지만, 결과는 "range 타입"이지 실제 숫자 목록은 아님
2. range_unpack(...)
- 역할: range 객체를 하나씩 숫자로 풀어줌
- 결과: 1, 2, 3, ..., 99999 값이 반복문에 순서대로 들어감
3. FOR x IN ... UNION (...)
- 루프를 도는 구조
- x에 숫자가 하나씩 들어가며, 아래의 삽입문이 반복 실행됨
4. INSERT Movie { title := "Movie " ++ <str>x }
- Movie 테이블에 새로운 레코드 추가
- title 값은 "Movie 1", "Movie 2", ... 형식으로 생성됨
- x는 숫자이므로 문자열로 변환 필요 → <str>x 사용
5. ++ 연산자
- 문자열을 붙이는(Concatenate) 연산자
- "Movie " + "1" = "Movie 1" 형태로 구성됨
🧠 int64란?
🔹 정의
- int64는 64비트 정수형 (integer 64-bit)의 약자
- 컴퓨터가 처리할 수 있는 정수 타입 중 가장 넓은 범위를 지원
🔹 왜 필요할까?
- 숫자를 저장할 때, 얼마나 큰 숫자를 다룰 수 있는지가 중요함
- 비트 수가 클수록 더 큰 숫자를 저장 가능
타입 비트수 표현 가능한 범위
int8 | 8비트 | -128 ~ 127 |
int16 | 16비트 | -32,768 ~ 32,767 |
int32 | 32비트 | 약 -21억 ~ 21억 |
int64 | 64비트 | 약 -9경 ~ +9경 |
🔹 EdgeDB에서의 사용
- range_unpack()을 통해 나온 숫자는 기본적으로 int64 타입
- 문자열과 붙이기 위해서는 반드시 형변환 <str>x 필요
🔍 정리
항목 설명
range_unpack | 범위를 숫자 리스트로 풀어줌 |
FOR x IN ... UNION | 각 숫자마다 루프를 돌며 삽입 수행 |
int64 | 64비트 정수형, 기본 숫자 타입 |
<str>x | 숫자를 문자열로 변환 (형변환) |
++ | 문자열을 붙이는 연산자 |
💡 실무 팁
- 대량의 데이터를 삽입할 땐 위와 같은 루프 기반 INSERT가 매우 유용
- 문자열을 만들 때는 항상 타입을 맞춰줘야 에러를 방지할 수 있음
궁금한 다른 EdgeQL 문법이나 예시가 있다면 언제든 요청해 주세요! 😊
'기술블로그-Fastapi편' 카테고리의 다른 글
📌 데이터베이스 검색 방식: Seq Scan vs Index Scan 정리 (0) | 2025.05.28 |
---|---|
📌 데이터베이스 인덱스(Index)와 B-Tree 구조 정리 (0) | 2025.05.28 |
📌 EdgeQL 쿼리 패턴 완전 정복 (0) | 2025.05.28 |
📌 EdgeDB 마이그레이션 꼬임 해결: 전체 초기화 루틴 (0) | 2025.05.28 |
📌 WSL + VS Code 연동 및 'code' 명령어 설정 방법 정리 (0) | 2025.05.28 |