Соединения имеют метод 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
соединение и курсор оба являются менеджерами контекста, в настоящее время было бы удобнее (и предпочтительнее) записать это как:
import pyodbc
conn = pyodbc.connect('DRIVER=MySQL ODBC 5.1 driver;SERVER=localhost;DATABASE=spt;UID=who;PWD=testest')
with conn:
crs = conn.cursor()
do_stuff
# conn.commit() will automatically be called when Python leaves the outer `with` statement
# Neither crs.close() nor conn.close() will be called upon leaving the `with` statement!!
Подробнее см. https://github.com/mkleehammer/pyodbc/issues/43. почему conn.close() не вызывается.
Обратите внимание, что в отличие от исходного кода, это приводит к вызову conn.commit()
. Используйте внешний оператор with
, чтобы контролировать, когда вы хотите, чтобы commit
вызывался.
Также обратите внимание, что независимо от того, используете ли вы операторы with
, согласно документам ,
Соединения автоматически закрываются при удалении (как правило, когда они выходят за рамки), поэтому обычно вам не нужно вызывать [conn.close()
], но вы можете явно закрыть соединение, если хотите.
и аналогично для курсоров (выделено мной):
Курсоры автоматически закрываются при удалении (обычно когда они выходят за пределы области видимости), поэтому вызов [csr.close()
] обычно не требуется.
person
unutbu
schedule
23.09.2010