2011-10-22 54 views
10

Tôi muốn mở dữ liệu trang web crom (trong ~/.config/chromium/Default) bằng python-sqlite3 nhưng nó bị khóa bất cứ khi nào crom đang chạy, điều này có thể hiểu được vì các giao dịch có thể được thực hiện. Có cách nào để mở nó trong chế độ chỉ đọc, đảm bảo rằng tôi không thể làm hỏng tính toàn vẹn của db trong khi crom đang sử dụng nó?Có thể mở cơ sở dữ liệu sqlite bị khóa ở chế độ chỉ đọc không?

Trả lời

7

Tôi tin rằng điều đó phụ thuộc vào khóa được đặt bởi giao dịch.

http://www.sqlite.org/lockingv3.html#shared_lock http://www.sqlite.org/lang_transaction.html

SQLite giao dịch độc quyền khóa cả đọc và ghi nơi giao dịch ngay lập tức và chậm vẫn sẽ cho phép người đọc.

Vì vậy, nó thực sự phụ thuộc vào các giao dịch được Chromium sử dụng.

+0

+1: Đây là cách thực hiện nó _within_ SQLite. –

3

Chromium đang giữ khóa cơ sở dữ liệu trong một thời gian dài? Kinh quá! Đó thực sự không phải là một ý tưởng hay. Tuy nhiên, không phải lỗi của bạn…

Bạn có thể thử sao chép tệp cơ sở dữ liệu (ví dụ: với tiện ích hệ thống cp) và sử dụng ảnh chụp đó cho mục đích đọc; SQLite giữ tất cả trạng thái cam kết của nó trong một tệp duy nhất cho mỗi cơ sở dữ liệu. Có, có một cơ hội nhìn thấy một phần giao dịch, nhưng bạn chắc chắn sẽ không có vấn đề về khóa trên Unix như SQLite chắc chắn không sử dụng khóa bắt buộc. (Điều này có thể không hoạt động trên Windows do sơ đồ khóa khác nhau ở đó.)

+2

Nó không nhất thiết phải là lỗi của crom. Đi vòng quanh, tôi thấy [this] (http://mail.python.org/pipermail/python-list/2009-July/1211171.html) thông báo hữu ích chỉ ra rằng thư viện pysqlite không cung cấp giao diện cho tất cả các tính năng của sqlite vì nó tuân thủ DB-API. Vì vậy, nó có thể là khi tôi mở db với pysqlite, tôi đang làm như vậy mà không nói trong chế độ đọc-ghi. Anh ta chỉ ra APSW để sử dụng cờ SQLITE_OPEN_READONLY khi bắt đầu một kết nối. Tôi sẽ kiểm tra nó ra ngay bây giờ. – ladaghini

Các vấn đề liên quan