2011-12-07 6 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

으로 내가 당신의 분포가 BDB SQLite는 API를 가지고 의심 때문에 정적 버전을 만들기 위해 여기 python27와 리눅스 x86_64의의 단계를 시도했습니다 여기 https://forums.oracle.com/forums/thread.jspa?threadID=2302793 을 제안했다.

다운로드 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 

은 내가 HG 체크 아웃을 사용했습니다, http://code.google.com/p/pysqlite/에서 pysqlite2의 사본을 얻을. 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') 
+0

리눅스 솔루션을 주셔서 감사합니다 ... 나는 또한 Windows 솔루션이 필요합니다 .... – Merlin

3

OracleBSDDB documentation에 따르면 BsdDB가 sqlite3 대체 라이브러리를 생성하도록 강제 할 수 있습니다. 그러면 이론적으로 표준 sqlite3 라이브러리 대신이 라이브러리를 사용할 수 있고 sqlite3 python 모듈을 사용할 수 있습니다.

아직 SQLite API를 지원하는 BsdDB 버전을 사용하는 것은 SleepyCat License에 따라 라이센스가 부여되며 이는 오라클에 요금을 지불하거나 오픈 소스 프로젝트가 될 것입니다. 선택).

+0

수수료에는 BSDDB 만 사용하면 수수료를 지불해야합니까? Isnt BSDDB 오픈 소스, MySQL에 가깝다. – Merlin

+0

@Merlin : BsdDB 라이센스에 대한 링크로 나의 대답을 업데이트했습니다. –

4

win32에서 라이브러리를 빌드하고 병합하는 것이 어렵습니다.

가정 :

  • python27 (내가 ActiveState의 파이썬을 가지고 있지만 python.org가 확인을해야) C에서 : python27
  • 비주얼 스튜디오 2010 프로 (I 생각도 작동해야 명시)

다운로드 BDB \ 및 pysqlite (이번에는 2.6을 얻었습니다.3) c:\bdb에 배치, 포장을 풀고 BDB는 구성과 Static Release을 선택

C:\bdb\db-5.2.36 

C:\bdb\db-5.2.36\build_windows의 이동은, 을 Berkeley_DB_vs2010.sln를 선택해야하고

libdb52s.liblibdb_sql52s.lib이 필요

세우겠다 있도록

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

c:\bdb에 pysqlite의 압축을 풉니 다. 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

관련 문제