2012-04-18 70 views
15

C/C++のsqlite3を使用しているときに、読み取り専用のオープンモードオプションがあることがわかりました。これは偶発的なデータ破損を避けるために非常に便利です。 Pythonバインディングにはこのようなことがありますか?Pythonから読み取り専用モードで開くsqlite3データベース

+0

可能な複製:http://stackoverflow.com/questions/4239606/sqlite3-read-only-on-a-file-system-that-doesnt-support-locking – Chris

+1

@Chrisありがとう、私は答えを編集する同じ質問をしている将来の人々にいくつかの仕事を保存するだけです。 – dsign

+0

可能性のある複製[ネイティブsqlite3を避けて(インストールされている)最新のsqlite3バージョンを使用するように強制する](http://stackoverflow.com/questions/1545479/force-python-to-forego-native-sqlite3-and-use- the-installed-latest-sqlite3-ver) –

答えて

2

@Chris、no。しかし、PEP 249に準拠していないsqlite3用の別のラッパーがあり、sqlite3をよりしっかりとラップし、エンジンの新機能を同化します:http://code.google.com/p/apsw/。そのラッパーは、データベースを読み取り専用モードで開くほか、その他の細かい点をサポートしています。パイソンのよう

21

では、次のと読み取り専用モードでデータベースを開くことができます3.4.0:

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

the documentationを参照してください。 Pythonの2.xのための

+0

注:これはPythonでは動作しません。Python 3でのみ動作します – lowtech

7

回避策:

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

POSIXが、Linux、OS/X、最も近代的なのunixでは使用できません。

関連する問題