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
테이블 생성과 데이터 타입 선택
4 / 10
다중 행은 executemany로
☆ Star
↗ Full
INSERT 단일 행 추가
#python
#mysql
#pymysql
#insert
#execute
@devpc
|
2026-05-04 12:41:22
|
GET /api/v1/flows/26/nodes/503?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# INSERT 단일 행 추가 ## 기본 패턴 INSERT의 핵심은 `%s` 플레이스홀더를 쓰는 것이다. SQL 문자열에 값을 직접 포맷하면 SQL 인젝션 위험이 있고, pymysql이 타입 변환도 자동으로 처리해주지 않는다. ```python import pymysql import datetime conn = pymysql.connect( host='localhost', user='root', password='', db='mydb', charset='utf8' ) now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') row = (now, 'temp_sensor', 36.5) try: with conn.cursor() as cursor: sql = 'INSERT INTO sensor_log (recorded, sensor, value) VALUES (%s, %s, %s)' cursor.execute(sql, row) conn.commit() finally: conn.close() ``` --- ## execute의 두 번째 인자 `cursor.execute(sql, data)` — 두 번째 인자에 tuple을 넘기면 각 `%s`에 순서대로 매핑된다. ```python # 컬럼 3개 → tuple 원소 3개 sql = 'INSERT INTO t (a, b, c) VALUES (%s, %s, %s)' data = ('hello', 42, 3.14) cursor.execute(sql, data) ``` tuple이 아닌 list도 동작하지만 tuple이 관례다. --- ## DATETIME 타입 처리 MySQL의 `DATETIME` 컬럼에는 `'YYYY-MM-DD HH:MM:SS'` 형식 문자열을 넣거나, Python `datetime.datetime` 객체를 직접 넣어도 pymysql이 변환해준다. ```python import datetime # 방법 1: 문자열 포맷 now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 방법 2: datetime 객체 직접 (pymysql이 변환) now_obj = datetime.datetime.now() cursor.execute(sql, (now_obj, 'sensor', 1.0)) ``` --- ## INSERT 후 AUTO_INCREMENT id 확인 ```python with conn.cursor() as cursor: cursor.execute( 'INSERT INTO sensor_log (recorded, sensor, value) VALUES (%s, %s, %s)', (now, 'sensor_a', 22.3) ) new_id = cursor.lastrowid # 방금 삽입된 행의 id conn.commit() print(f"Inserted id: {new_id}") ```
테이블 생성과 데이터 타입 선택
다중 행은 executemany로
// COMMENTS
Newest First
ON THIS PAGE
No content selected.