나는이 코드가 집중적으로 사용되는 서버에서 실행되기 때문에 데이터베이스 연결이 가능한 한 많이 열리지 않도록하고 싶습니다. 여기 사람들은 이미 데이터베이스 연결을 가능한 한 빨리 닫아야한다고 말했습니다. 파이썬에서 코드 블록을 떠나기 전에 데이터베이스 연결이 항상 닫히는 지 확인하는 방법은 무엇입니까?
def do_something_that_needs_database():
dbConnection = MySQLdb.connect(host=args['database_host'], user=args['database_user'], passwd=args['database_pass'], db=args['database_tabl'], cursorclass=MySQLdb.cursors.DictCursor)
dbCursor = dbConnection.cursor()
dbCursor.execute('SELECT COUNT(*) total FROM table')
row = dbCursor.fetchone()
if row['total'] == 0:
print 'error: table have no records'
dbCursor.execute('UPDATE table SET field="%s"', whatever_value)
return None
print 'table is ok'
dbCursor.execute('UPDATE table SET field="%s"', another_value)
# a lot more of workflow done here
dbConnection.close()
# even more stuff would come below
은 그게 아니 행이
I'm still really not sure how it works 그래도, 테이블에 존재하지 않는 경우 데이터베이스 연결을 열 잎 생각합니다.
어쨌든, 내가 열 수있는 의미에서 나쁜 디자인 어쩌면 execute
각 작은 블록 후 DB 연결을 닫습니다. 그리고 물론, 내가 가지고 걱정하지 않고 DB를 그냥 ... 바로이 경우에 return
전에
을 close
을 추가 할 수 있습니다하지만 어떻게 난 항상 제대로 닫을 수 return
, 또는 raise
, 또는 continue
, 또는 중간에 뭐든간에? ExitingCodeBlock
에 아무것도 비슷한는 예외가 나는 생각하지 않는다
def do_something_that_needs_database():
dbConnection = MySQLdb.connect(host=args['database_host'], user=args['database_user'], passwd=args['database_pass'], db=args['database_tabl'], cursorclass=MySQLdb.cursors.DictCursor)
try:
dbCursor = dbConnection.cursor()
dbCursor.execute('SELECT COUNT(*) total FROM table')
row = dbCursor.fetchone()
if row['total'] == 0:
print 'error: table have no records'
dbCursor.execute('UPDATE table SET field="%s"', whatever_value)
return None
print 'table is ok'
dbCursor.execute('UPDATE table SET field="%s"', another_value)
# again, that same lot of line codes done here
except ExitingCodeBlock:
closeDb(dbConnection)
# still, that "even more stuff" from before would come below
을 : 나는 분명히 작동하지 않는 다음과 같은 제안,처럼, try
를 사용하여 유사한 코드 블록처럼 뭔가를 생각하고 있어요 이 내가 아는 그래도의 는else
을 시도,하지만 난 파이썬은 이미 비슷한 기능을 가지고 희망 ...
을 아니면 누군가가 나에게 패러다임의 이동을 제안 할 수 있으며,이 끔찍 말해 매우 나를 짓을하지 않을 조언 그. 어쩌면 이것은 걱정하지 않아도되고 MySQLdb가 처리 할 수있는 것일 수도 있습니다. 그렇지 않습니까?
여러분과 Michael이 답변을 편집 한 후에 우리는 매우 유사하고 완전한 2 가지를 선택했습니다 ... 선택할 수 없습니다. – cregox