import pymysql conn = pymysql.connect(=host=127.0.0.1, port=3306, user=root, password=123456, db="test", charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor, autocommit=True) cursor = conn.cursor() select_one = "SELECT * FROM test_table WHERE no=1" # 첫번째 execute ----- cur.execute(select_one) result = cur.fetchone() if cur.fetchone() else '' # 두번째 execute ----- cur.execute(select_one) row = cur.fetchone() result = row if row else ''
해당 쿼리에 정확한 값이 들어있다고 가정했을 때, 첫번째 execute와 두번째 execute는 동일하게 동작할까요?
정답은 두가지입니다.
- 그렇다
- 아니다
return cur.fetchone() if cur.fetchone() else ''
간단한 select 같은 경우에는 최대한 간단하면서도 간결하게 처리하기 위해서 위와 같은 구문을 많이 썼는데요, 저 구문이 동작하는 경우도 물론 많았습니다.......... 근데 그게 오류였어요 ㅋㅋㅋㅋㅋ 오류지만 맞는 값을 줄 때도 있으니 정답은 네니요....
테이블에 1번 row 하나만 있을 때 fetchone은 해당 구문을 셀렉트해서 들고 있습니다. 그리고 포인터는 거기에 멈춰있을거에요.
근데 저 구문에서는 fetchone을 두번 사용했잖아요.....?
즉 1번을 찾은 후에 멈춰있던 포인터가 다음 값을 찾기 위해서 움직여봤자 2번 값은 없으니까 None을 리턴한거죠
row = cur.fetchone() result = row if row else ''
앞으로는 위와 같이 써주는걸로 :)
stackoverflow.com/questions/48143659/cursor-fetchone-returns-none-even-though-a-value-exists
'Python > Python__works' 카테고리의 다른 글
datetime 활용하기 (0) | 2020.09.24 |
---|---|
실행 중인 메서드이름, 파일 이름 (0) | 2020.09.24 |
python slacker (0) | 2020.06.11 |
no module named mysqldb (0) | 2020.03.30 |
sqlalchemy (0) | 2020.03.04 |