Tôi đang làm một cái gì đó như thế này ...gì nếu tôi không đóng kết nối cơ sở dữ liệu SQLite bằng Python
conn = sqlite3.connect(db_filename)
with conn:
cur = conn.cursor()
cur.execute(...)
with
tự động cam kết những thay đổi. Nhưng các tài liệu không nói gì về việc đóng kết nối.
Thực ra tôi có thể sử dụng conn
trong các phát biểu sau (mà tôi đã thử nghiệm). Do đó có vẻ như người quản lý ngữ cảnh KHÔNG đóng kết nối.
Tôi có phải đóng kết nối theo cách thủ công không. Nếu tôi để nó mở thì sao?
EDIT
kết luận của tôi ...
- Kết nối KHÔNG đóng trong bộ quản lý bối cảnh, tôi đã thử nghiệm và xác nhận nó. Khi
__exit__
, người quản lý ngữ cảnh CHỈ cam kết các thay đổi bằng cách thực hiệnconn.commit()
with conn
vàwith sqlite3.connect(db_filename) as conn
là một và cùng một điều. Vì vậy, sử dụng một trong hai vẫn sẽ giữ kết nối sốngwith
tuyên bố không tạo ra một phạm vi mới, do đó tất cả các biến được tạo ra bên trong bộ với sẽ được truy cập bên ngoài nó- Cuối cùng, bạn nên đóng kết nối bằng tay
Nếu bạn mở nó, nó vẫn mở cho đến khi nó nằm ngoài phạm vi và rác được thu thập. Tại thời điểm đó nó _might be_ đóng một cách an toàn (và tôi tin rằng 'sqlite3' làm điều đó). Nhưng tốt hơn để được an toàn hơn xin lỗi. Đóng các kết nối của bạn khi bạn không còn sử dụng chúng. – Avaris
Rất vui khi thấy người dùng SO có 6 đại diện quay lại và phản hồi các câu trả lời mà họ cảm thấy không trả lời câu hỏi. Một +1 lớn ở đó. – Droogans