프로그래밍/개인 프로젝트

pymysql 활용한 함수 시행착오

무연 2023. 6. 7. 23:25

보통 작업이 아래와 같은 형태로 진행됩니다.

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()