Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- commit
- 면접합격
- github
- 프로젝트회고록
- BFG
- pymysql
- 백준
- SQL
- 백엔드
- 커밋옮기기
- 프로시저
- mybatis
- BOJ
- treeset
- RequiredArgsConstructor
- SSAFY
- 윈도우우분투
- 이중우선순위큐
- tmehz
- 추가합격
- window
- 싸피
- JsonObect
- SSAFY #싸피 #7기 #합격 #개발
- 의존성주입
- Java
- UnsupportedOperationException
- gitlab
- IntelliJ
- 삼성 #교육 #개발자 #웹
Archives
- Today
- Total
데굴데굴 굴러가는 개발 블로그
Python을 이용한 SQL Database 다루기 본문
졸업 하기 위한 생존형 코드를 짜던 도중... 데이터를 넣고나니 mysql에 크롤링해서 넣은 데이터 값이 잘못된걸 알았다...
설마 이걸 다시 크롤링 해야하나 막막해 하던 도중에
팀원의 " 어? 그거 파이썬으로 DB값 가져와서 UPDATE만 시키면 되지않을까요?" 라는 천사의 속삭임을 들었다....
이렇게 시작된 python으로 데이터베이스 수정
1. mysql을 사용하기위해 pymysql import
# python 에서 mysql사용하기 위해 pymysql import
import pymysql.cursors
2. database 연동 (db 정보를 conn 객체에 넣음)
# 데이터베이스 연동
conn = pymysql.connect(
host = 'db_address', # 데이터베이스 주소 ex) 로컬db = localhost
user = 'user_name', # 유저이름
password = 'password', # 비밀번호
db = 'database', # 사용할 데이터베이스
charset = 'utf8' # 인코딩 캐릭터셋
)
이 작업까지 하게되면 'conn'을 이용해 db에 접근할 수 있다.
3. cursor() 메소드를 사용하여 cursor 객체를 가져오기
cursor = conn.cursor()
cursor 객체는 excute() 메소드를 이용해 sql문을 DB에 실행시킬수 있다.
sql = "sql문"
# sql문 자체가 이미 완성되어 있을 때
cursor.execute(sql)
# sql = "select * from %s ;" 일 때는 2번째 인자로 %s의 value를 적어줘야한다.
cursor.execute(sql,value)
여기서부터는 sql문법에 맞춰서 python에서 sql문을 작성해주는 코드이다.
# select 문
sql = "select [컬럼명] from [테이블명] where = [조건]; "
# insert 문
sql = "insert into [테이블명(컬럼명)] values [(컬럼값1,컬럼값2,~)];"
# 특정 변수값을 집어넣고 싶다면
sql = "insert into [테이블명(컬럼명)] values(%d,'%s',~);" %(value_d,value_s)
# update 문
sql = "update [테이블명] set [컬럼명 = 변경할값] where = [조건];"
사실 select,insert, update 말고도 굉장히 많은 sql문법들이 있지만 위의 코드를 이해했다면 sql문법만 안다면 동일하게 적용하면된다.
나의 경우에는 item 테이블의 stock_quantity 값이 item_option 테이블에서 같은 item_id를 가진 상품들의 모든 재고(quantity)를 합한 값으로 바꿔야했다.
# item_option 테이블에서 item_id가 같은 요소들의 합을 구해서 item.stock_quantity 수량 바꾸기
try:
for i in range(1,307):
result = 0
cursors.execute("select sum(stock_quantity) from item_option where item_id = " + str(i) +";")
conn.commit()
item_stock_quantity_tuple = cursors.fetchone()
# 가끔 fetchone()을 했지만 값이 없는 경우에는 None이 반환되어 except문으로 빠져버리기 때문에 이 부분을 해결하고자 함
if item_stock_quantity_tuple[0] != None:
# fetchone()의 반환값은 tuple 형태 (값1,0) 형식으로 반환되기 때문에
# tuple[0]번째 요소가 우리가 찾는 값인 sum(stock_quantity)값 이다.
sql = 'update item set stock_quantity = %s where item_id = %s;' %(str(item_stock_quantity),str(i)) # update문
item_stock_quantity = item_stock_quantity_tuple[0]
cursors.execute(sql)
# ! 중요 ! 이부분을 빼먹게 되면 파이썬은 auto_commit 기능을 지원하지 않기 때문에
# 꼭!!! commit을 해줘야한다 (본인은 여기서 10분넘게 헤맴...ㅠ)
conn.commit()
else:
continue
except:
print(str(i)+ "번째에서 실패") # 만약에 실패할 경우 i값을 알아야 그 지점을 수정할 수 있기 때문
'개발 > 프로젝트' 카테고리의 다른 글
GitLab 에서 Github로 commit 까지 clone 하는법 (2) | 2022.09.22 |
---|---|
Vue router-link 에 @click 이벤트 적용 (0) | 2022.05.25 |