보통 작업이 아래와 같은 형태로 진행됩니다.
import pymysql
con = pymysql.connect (host=host,user =user ,password=pw, db='file')
cur = con.cursor()
(중략)
con.commit()
cur.close()
con.close()
위를 그대로 활용하여 다음과 같이 2개의 함수를 만든다고 가정해 봅시다.
import pymysql
con = pymysql.connect (host=host,user =user ,password=pw, db='file')
def function1()
cur = con.cursor()
(중략)
con.commit()
cur.close()
con.close()
def function2()
cur = con.cursor()
(중략)
con.commit()
cur.close()
con.close()
function1 과 function2를 각각 호출할 떄는 문제가 없으나, 이어서 호출하면 다음과 같은 오류가 발생합니다.
File "C:\Users\Home\anaconda3\envs\c\lib\site-packages\pymysql\cursors.py", line 148, in execute
result = self._query(query)
File "C:\Users\Hyun\anaconda3\envs\c\lib\site-packages\pymysql\cursors.py", line 310, in _query
conn.query(q)
File "C:\Users\Home\anaconda3\envs\c\lib\site-packages\pymysql\connections.py", line 547, in query
self._execute_command(COMMAND.COM_QUERY, sql)
File "C:\Users\Home\anaconda3\envs\c\lib\site-packages\pymysql\connections.py", line 793, in _execute_command
raise err.InterfaceError(0, "")
pymysql.err.InterfaceError: (0, '')
이 오류는 닫힌 데이터베이스 연결을 사용하여 쿼리를 실행하려고 할 때 발생한 것입니다.
function1에서 연결을 닫았는데, 닫힌 연결을 다시 사용하려해서 발생했습니다.
with 문을 활용하면 해결할 수 있습니다. 이렇게 하면 연결이 제대로 닫히고 리소스가 해제됩니다.
import pymysql
con = pymysql.connect (host=host,user =user ,password=pw, db='file')
def function1()
with con.cursor() as cur:
(중략)
con.commit()
def function2()
with con.cursor() as cur:
(중략)
con.commit()
'프로그래밍 > 개인 프로젝트' 카테고리의 다른 글
mecab 실행 오류 (0) | 2023.06.15 |
---|---|
[라즈베리파이] talib 설치 및 오류 해결 (0) | 2023.06.06 |
[라즈베리파이] omv Failed to execute command 'export 오류(2) (0) | 2023.04.07 |
[라즈베리파이] omv Failed to execute command 'export 오류(1) (0) | 2023.03.30 |
Speechrecognition flac 에러 (1) | 2023.03.23 |