Python Berkeley DB / Sqlite - PullRequest
       6

Python Berkeley DB / Sqlite

6 голосов
/ 07 декабря 2011

Поскольку BerkeleyDB может использовать API SQLite, может ли Python использовать модуль sqlite для подключения к BerkeleyDB.

В этом посте предлагается использовать что-то еще, но, возможно, было написано pre-Api sync. Лучший модуль Python для Беркли DB?

Может получить простую строку подключения.Если есть известные проблемы, пожалуйста, напишите.Я изучаю эту тему.

Использование python 2.7 в Linux и Windows.

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

Как предлагается здесь 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/, Я использовал проверку hg.В setup.cfg добавьте в раздел build_ext (есть еще две закомментированные строки, которые вы можете использовать повторно)

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

, затем cd в 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')
4 голосов
/ 18 декабря 2011

Создание и объединение библиотек на win32 - сложная задача:)

Мои предположения:

  • python27 (у меня есть ActiveState python, но с python.org все должно быть в порядке) в c: \ python27
  • visual studio 2010 professional (думаю, экспресс тоже должен работать)

Загрузите 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.lib и libdb_sql52s.lib в

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

теперь распакуйте pysqlite в c:\bdb, зайдите в 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
3 голосов
/ 07 декабря 2011

Согласно документации OracleBSDDB , вы можете заставить BsdDB сгенерировать библиотеку замены sqlite3, тогда (теоретически) вы сможете использовать эту библиотеку вместо стандартной библиотеки sqlite3, а затем использовать модуль Python sqlite3.

Тем не менее, будьте осторожны, используя версию BsdDB, поддерживающую SQLite API, лицензированную по лицензии SleepyCat , которая заставит вас платить сборы Oracle ИЛИ быть проектом с открытым исходным кодом (ни одно из этих решений не является очень плохо, но вы должны выбрать).

...