2012-04-18 36 views
15

Khi sử dụng sqlite3 từ C/C++ tôi đã học được rằng nó có tùy chọn chế độ mở chỉ đọc, rất tiện lợi để tránh hỏng dữ liệu ngẫu nhiên. Có một điều như vậy trong ràng buộc Python không?Mở cơ sở dữ liệu sqlite3 từ python ở chế độ chỉ đọc

+0

Bản sao có thể có của: http://stackoverflow.com/questions/4239606/sqlite3-read-only-on-a-file-system-that-doesnt-support-locking – Chris

+1

@Chris Xin cảm ơn, tôi sẽ làm lại câu trả lời chỉ để tiết kiệm một số công việc cho những người tương lai với cùng một câu hỏi. – dsign

+0

có thể trùng lặp của [lực lượng python để từ bỏ bản địa sqlite3 và sử dụng (cài đặt) phiên bản mới nhất sqlite3] (http://stackoverflow.com/questions/1545479/force-python-to-forego-native-sqlite3-and-use- the-installed-latest-sqlite3-ver) –

Trả lời

2

Do liên kết được đưa ra bởi @Chris, no. Nhưng có một wrapper cho sqlite3, đó là ít hơn PEP 249 tuân thủ và kết thúc tốt hơn sqlite3 chặt chẽ hơn, đồng hóa các tính năng mới của động cơ: http://code.google.com/p/apsw/. Trình bao bọc đó hỗ trợ mở cơ sở dữ liệu ở chế độ chỉ đọc, cộng với các phần tử khác.

21

Tính đến Python 3.4.0 bạn có thể mở cơ sở dữ liệu ở chế độ chỉ đọc như sau:

db = sqlite3.connect('file:/path/to/database?mode=ro', uri=True) 

Xem thêm the documentation.

+0

LƯU Ý: điều này không hoạt động trên Python, chỉ trên Python 3 – lowtech

7

Giải pháp cho Python 2.x:

fd = os.open(filename, os.O_RDONLY) 
c = sqlite3.connect('/dev/fd/%d' % fd) 
os.close(fd) 

Không posix, nhưng có sẵn trên Linux, OS/X và hầu hết unixes hiện đại.

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