null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
Python으로 MySQL 다루기
Structure
connect
•
pymysql 연결 패턴 정리
db-table
•
DB 만들고 지우는 법
•
테이블 생성과 데이터 타입 선택
write
•
INSERT 단일 행 추가
•
다중 행은 executemany로
read
•
SELECT로 전체 조회하기
•
WHERE로 조건 조회
•
ORDER BY, LIMIT로 정렬과 페이징
advanced
•
UPDATE와 DELETE 패턴
•
NaN → None 변환과 에러 처리
Flow Structure
INSERT 단일 행 추가
5 / 10
SELECT로 전체 조회하기
☆ Star
↗ Full
다중 행은 executemany로
#python
#mysql
#pymysql
#insert
#executemany
@devpc
|
2026-05-04 12:41:22
|
GET /api/v1/flows/26/nodes/504?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# 다중 행은 executemany로 ## execute 반복 vs executemany 여러 행을 INSERT할 때 반복문으로 `execute`를 쓰면 DB 왕복이 N번 발생한다. 데이터가 많아질수록 느려지고 서버 부하도 커진다. ```python # ❌ 반복문 execute — DB 왕복 N번 for row in data_list: cursor.execute(sql, row) ``` `executemany`는 여러 행을 한 번에 보낸다. ```python # ✅ executemany — DB 왕복 1번 cursor.executemany(sql, data_list) ``` --- ## executemany 사용법 ```python import pymysql import datetime now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 삽입할 데이터: list of tuple data_list = [ (now, 'sensor_a', 22.1), (now, 'sensor_b', 35.7), (now, 'sensor_c', 18.4), ] conn = pymysql.connect( host='localhost', user='root', password='', db='mydb', charset='utf8' ) try: with conn.cursor() as cursor: sql = 'INSERT INTO sensor_log (recorded, sensor, value) VALUES (%s, %s, %s)' cursor.executemany(sql, data_list) conn.commit() finally: conn.close() ``` `data_list`는 **tuple의 list**여야 한다. `execute`의 단일 tuple과 구조는 같지만 여러 개가 리스트로 묶인 형태다. --- ## 실시간 데이터 수집 예시 센서에서 읽은 데이터를 버퍼에 쌓다가 일정 개수가 되면 한 번에 DB에 쓰는 패턴이다. ```python BATCH_SIZE = 50 buffer = [] def flush_to_db(rows): conn = pymysql.connect( host='localhost', user='root', password='', db='mydb', charset='utf8' ) try: with conn.cursor() as cursor: sql = 'INSERT INTO sensor_log (recorded, sensor, value) VALUES (%s, %s, %s)' cursor.executemany(sql, rows) conn.commit() finally: conn.close() # 수집 루프 for reading in sensor_stream(): buffer.append(reading) if len(buffer) >= BATCH_SIZE: flush_to_db(buffer) buffer.clear() # 루프 종료 후 남은 데이터 처리 if buffer: flush_to_db(buffer) ``` --- ## execute vs executemany 비교 | 항목 | `execute` | `executemany` | |------|-----------|---------------| | 한 번에 처리하는 행 수 | 1 | N | | DB 왕복 횟수 | N번 | 1번 | | 인자 형태 | `tuple` | `list of tuple` | | 에러 발생 시 | 해당 행에서 중단 | 배치 전체 롤백 | | 권장 상황 | 단건 INSERT | 대량 INSERT |
INSERT 단일 행 추가
SELECT로 전체 조회하기
// COMMENTS
Newest First
ON THIS PAGE
No content selected.