이 재생 된 샘플입니다 가까운 커서 쿼리 루프를 실행합니다파이썬 MySQL은
import mysql.connector
conn = mysql.connector.connect(
user='root', password='12347',
host='localhost')
def getCursor():
return conn.cursor()
def execQuery(cursor=getCursor()):
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
for i in range(4):
cursor = execQuery()
이 코드는 cursor.close()
없이 작동합니다. 하지만 제가 이상한 찾으이 샘플은 간단한 변화() cursor.close로도 작동한다는 것입니다 :
def execQuery():
cursor=getCursor()
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
함수의 본체에 기본 매개 변수를 이동하여.
커서를 닫는 것이 가장 좋은 방법인지 모르겠으므로 첫 번째 양식을 유지하면서 커서를 닫을 수 있습니다. 함수의 반환 값을 사용하는 기본 매개 변수를 사용하는 것이 가장 좋은 방법이 아닌 경우 두 번째 형식을 사용할 수 있습니다. 그러나 나는 그들이 다르게 행동하는 이유에 원하는 나는 다음과 같은 오류가 있어요처럼입니다
:
cursor.execute("SELECT 2")
cursor.fetchall()
cursor.close()
cursor.execute("SELECT 2")
이 차단됩니다 그래서, ExecQuery에의 모든 호출이 동일한 커서를 사용하고 같은거야 두 번째 전화에서 바로.
답변 해 주셔서 감사합니다. 나는 '모든 것을 커서로 만드는 기능'이 '커서가 될 때마다'라고 생각한다. – user3290525
어쨌든 당신의 대답에서 이해할 수있는대로,'execQuery'가 루프에서 호출 될 때마다 커서가 생성됩니다. 그런 다음 커서를 닫고 다시 만들지 말라. 'execQuery'가 두 번 실행될 때, 커서가 닫혀 있었기 때문에 커서가 생성되지 않는다는 말입니까? 왜 다시 만들어지지 않았는지 말해 줄 수 있니? – user3290525