2011-12-07 183 views
6

由於BerkeleyDB可以使用SQLite api,因此python可以使用sqlite模塊連接到BerkeleyDB。Python Berkeley DB/Sqlite

這篇文章建議使用別的東西,但可能已經寫入了Api前同步。 Best Python module for Berkeley DB?

可以得到一個簡單的連接字符串。如果有問題,請發帖。我正在探討這個話題。

在linux和windows上使用python 2.7。

+0

我正在調查,爲什麼你認爲你連想這個?保持相同的API不會使數據庫文件本身更具可移植性,每次必須遷移到新主機時,必須重複非標準編譯過程。使用比Sqlite3更多功能的數據庫非常簡單,所有主要數據庫都有DBApi兼容綁定。 – SingleNegationElimination

+0

您的調查答案:每個人都有自己的用例和開發路徑。 – Merlin

+0

我在問你的用例,因爲你可能正在尋找一個解決方案來處理這個特定的案例。 – SingleNegationElimination

回答

4

由於這裏建議https://forums.oracle.com/forums/thread.jspa?threadID=2302793 我試圖在Linux x86_64的與python27,這裏的步驟,使靜態版本,因爲 我懷疑你的分佈BDB sqlite的API。

下載DB-5.2.36.tar.gz

tar xzvf db-5.2.36.tar.gz 
cd db-5.2.36/build_unix/ 
CFLAGS="-fPIC" ../dist/configure --enable-static --disable-shared --enable-sql-compat 
# you need -fPIC to build the python ext of pysqlite 
make 
make prefix=/tmp/bdb install 

得到pysqlite2副本從http://code.google.com/p/pysqlite/,我用的汞檢出。 在setup.cfg加入build_ext節(有可是由註釋行,你可以重新使用它們)

include_dirs=/tmp/bdb/include 
library_dirs=/tmp/bdb/lib 

然後光盤pysqlite:

python setup.py build 
python setup.py install 

或無需安裝:

cd build/lib.linux-x86_64-2.7 
python 
from pysqlite2 import dbapi2 
conn = dbapi2.connect('test.db') 
c = conn.cursor() 
c.execute('bla bla bla sql') 
+0

感謝您的Linux解決方案...我也需要一個Windows解決方案....「 – Merlin

3

根據OracleBSDDB documentation,你可以強制BsdDB生成一個sqlite3替換庫,然後(理論上)你將能夠使用這個庫替換標準的sqlite3庫,然後使用sqlite3 python模塊。

然而,請注意,使用支持SQLite API的BsdDB版本在SleepyCat License下許可,這將迫使您向Oracle支付費用或成爲一個開源項目(這些解決方案都不是非常糟糕,但您有選擇)。

+0

關於收費,單獨使用BSDDB,我需要付費嗎? Isnt BSDDB開源,類似於MySQL。 – Merlin

+0

@ Merlin:我通過鏈接到BsdDB許可證更新了我的答案。 –

4

在win32上構建和合並庫文件具有挑戰性:)

我的假設:

  • python27(我有ActiveState的蟒蛇,但python.org應該沒問題)在C:\ python27
  • 的Visual Studio 2010專業版(我想表達應太)

下載BDB和pysqlite(這次我有2.6。3),並把它放在c:\bdb, 解壓BDB所以你必須

C:\bdb\db-5.2.36 

走在C:\bdb\db-5.2.36\build_windowsBerkeley_DB_vs2010.sln, 選擇Static Release作爲配置和構建

你需要有libdb52s.liblibdb_sql52s.lib

C:\bdb\db-5.2.36\build_windows\Win32\Static Release 

現在解壓pysqlite在c:\bdb,進入C:\bdb\pysqlite-2.6.3 d 編輯setup.cfg如下:

[build_ext] 
include_dirs=C:\bdb\db-5.2.36\lang\sql\generated 
library_dirs=C:\bdb\db-5.2.36\build_windows\Win32\Static Release 
define=SQLITE_OMIT_LOAD_EXTENSION 

一定要刪除庫=我不得不添加他們的setup.py, 因爲我們需要指定多個庫靜態鏈接的, 如果有人知道的方式以指定setup.cfg列表,請告訴我:)

現已開放setup.py在走線191和替換:

libraries=libraries 

有:

(在Visual Studio工具菜單)
libraries=['libdb_sql52s', 'libdb52s', 'ws2_32', 'advapi32'], 

打開VS2010命令提示符

c:\bdb\pysqlite

set DISTUTILS_USE_SDK=1 
set MSSdk=1 
python setup.py build 
# ignore errors about manifests, just make sure _sqlite.pyd is built 

# make same tests of the linux instructions 

python setup.py bdist_wininst 
will make the .exe installer in dist subdir 
+1

+1」在win32上構建和合並庫具有挑戰性:)「 – Merlin