2012-04-18 16 views
15

Podczas używania sqlite3 z C/C++ dowiedziałem się, że ma on opcję trybu tylko do odczytu, co jest bardzo przydatne, aby uniknąć przypadkowego uszkodzenia danych. Czy jest coś takiego w powiązaniu z Pythonem?Otwieranie bazy danych sqlite3 z Pythona w trybie tylko do odczytu

+0

Możliwy duplikat: http://stackoverflow.com/questions/4239606/sqlite3-read-only-on-a-file-system-that-doesnt-support-locking – Chris

+1

@Chris Dzięki, zredaguję odpowiedź tylko po to, by zaoszczędzić trochę pracy przyszłym ludziom z tym samym pytaniem. – dsign

+0

możliwy duplikat [force python, aby zrezygnować z natywnego sqlite3 i użyć (zainstalowanej) najnowszej wersji sqlite3] (http://stackoverflow.com/questions/1545479/force-python-to-forego-native-sqlite3-and-use- the-installed-latest-sqlite3-ver) –

Odpowiedz

2

Zgodnie z linkiem podanym przez @Chris, nie. Ale jest jeszcze inne opakowanie dla sqlite3, które jest mniej zgodne z PEP 249 i bardziej szczelnie otacza sqlite3, przyswajając nowe funkcje silnika: http://code.google.com/p/apsw/. Owijarka obsługuje otwieranie bazy danych w trybie tylko do odczytu oraz inne elementy.

21

Jak Pythona 3.4.0 można otworzyć bazę danych w trybie tylko do odczytu z następujących czynności:

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

zobaczyć również the documentation.

+0

UWAGA: to nie działa w Pythonie, tylko w Pythonie 3 – lowtech

7

Obejście dla Pythona 2.x:

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

Nie POSIX, ale dostępne w systemie Linux, OS/X i większością UNIX-ów.

Powiązane problemy