Python Berkeley DB / Sqlite

时间:2011-12-07 16:09:47

标签: python sqlite berkeley-db

由于BerkeleyDB可以使用SQLite api,可以使用python使用sqlite模块连接到BerkeleyDB。

这篇文章建议使用别的东西,但可能是在Api之前同步写的。 Best Python module for Berkeley DB?

可以获得一个简单的连接字符串。如果有已知问题,请发帖。我正在探索这个话题。

在linux和windows上使用python 2.7。

3 个答案:

答案 0 :(得分:4)

正如此处所建议https://forums.oracle.com/forums/thread.jspa?threadID=2302793 我已经尝试过使用python27的linux x86_64,这里是制作静态版本的步骤 我怀疑你的发行版有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

http://code.google.com/p/pysqlite/获取pysqlite2的副本,我使用了hg结帐。 在setup.cfg中添加build_ext部分(还有两行注释行可以重用它们)

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

然后在pysqlite中执行cd:

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')

答案 1 :(得分:4)

在win32上构建和合并库很有挑战性:)

我的假设:

  • python27(我有ActiveState python,但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_windows选择Berkeley_DB_vs2010.sln, 选择Static Release作为配置并构建

您需要在

中拥有libdb52s.liblibdb_sql52s.lib
C:\bdb\db-5.2.36\build_windows\Win32\Static Release

现在在c:\bdb解包pysqlite,进入C:\bdb\pysqlite-2.6.3和 编辑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

使用:

libraries=['libdb_sql52s', 'libdb52s', 'ws2_32', 'advapi32'],

打开vs2010命令提示符(在visual studio工具菜单中)

进入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

答案 2 :(得分:3)

根据OracleBSDDB documentation,你可以强制BsdDB生成一个sqlite3替换库,然后(理论上)你将能够使用这个库来代替标准的sqlite3库,然后使用sqlite3 python模块。

然而,使用支持SQLite API的BsdDB版本在SleepyCat License下获得许可,这将迫使您向Oracle支付费用或者是一个开源项目(这些解决方案都不是很糟糕,但你必须选择)。