Соединения имеют метод close
, как указано в PEP-249 (спецификация API базы данных Python v2.0):
import pyodbc
conn = pyodbc.connect('DRIVER=MySQL ODBC 5.1 driver;SERVER=localhost;DATABASE=spt;UID=who;PWD=testest')
csr = conn.cursor()
csr.close()
conn.close() #<--- Close the connection
Начиная с pyodbc
connection и курсор оба являются менеджерами контекста, в настоящее время было бы удобнее (и предпочтительнее) записать это как:
import pyodbc
conn = pyodbc.connect('DRIVER=MySQL ODBC 5.1 driver;SERVER=localhost;DATABASE=spt;UID=who;PWD=testest')
with conn:
with conn.cursor() as crs:
do_stuff
# crs.close() will automatically be called when Python leaves the inner `with` statement
# conn.commit() will automatically be called when Python leaves the outer `with` statement
Обратите внимание, что в отличие от исходного кода,это вызывает conn.commit()
для вызова.Используйте внешний оператор with
, чтобы контролировать, когда вы хотите, чтобы commit
был вызван.Используйте внутренний оператор with
для управления, когда вы хотите закрыть курсор.
Также обратите внимание, что независимо от того, используете ли вы операторы with
, для документов ,
Соединения автоматически закрываются при удалении (как правило, когда они выходят за пределы области видимости), поэтому обычно вам не нужно вызывать [conn.close()
], но вы можете явно закрыть соединение, еслиВы хотите.
и аналогично для курсоров (мой акцент):
Курсоры закрываются автоматически при их удалении (как правило, когда они выходятобласти видимости), , поэтому вызывать [csr.close()
] обычно не нужно .