с транзакциями.
И хотя соединение тоже можно открывать в блоке with (файл with_sqlite_conn.py):
import sqlite3
with sqlite3.connect('dhcp_snooping.db') as conn:
for row in conn.execute('select * from dhcp'):
print(row)
На самом деле, после этого блока соединение не закрыто.
Поэтому лучше не открывать соединение таким образом, так как создается впечатление, что оно будет автоматически закрыто.
Но, можно создать свой менеджер контекста, который будет закрывать соединение:
import contextlib
import sqlite3
@contextlib.contextmanager
def sqlite3_connection(db_name):
connection = sqlite3.connect(db_name)
yield connection
connection.close()
Вопрос. Все таки, как лучше открывать и закрывать соединения?
И нужен ли контекстный менеджер?
> На самом деле, после этого блока соединение не закрыто. Поэтому лучше не открывать соединение таким образом, так как создается впечатление, что оно будет автоматически закрыто С чего это решил что соединение не закрыто?
Так with начинает и завершает транзакцию, а не открывает и закрывает соединение
Обсуждают сегодня