2011-12-07 12 views
6

Como BerkeleyDB puede usar la API api, ¿puede Python usar el módulo sqlite para conectarse a BerkeleyDB?Python Berkeley DB/Sqlite

Esta publicación sugiere utilizar algo más, pero podría haberse escrito sincronización previa a Api. Best Python module for Berkeley DB?

Se puede obtener una cadena de conexión simple. Si hay un problema conocido, POR FAVOR publique. Estoy explorando este tema.

Usando python 2.7 en Linux y Windows.

+0

estoy haciendo una encuesta, ¿Por qué cree que incluso quiere esto? Mantener la misma API no hará que los archivos de la base de datos sean más portátiles, tendrá que repetir el procedimiento de compilación no estándar cada vez que tenga que migrar a un nuevo host. Usar una base de datos más completa que Sqlite3 es bastante simple, todas las bases de datos importantes tienen enlaces compatibles con DBApi. – SingleNegationElimination

+0

Respuesta a su encuesta: Todos tienen su propio caso de uso y ruta dev. – Merlin

+0

Pregunto por su caso de uso, ya que probablemente esté buscando una solución para ese caso en particular. – SingleNegationElimination

Respuesta

4

Como sugiere aquí https://forums.oracle.com/forums/thread.jspa?threadID=2302793 He intentado en Linux x86_64 con python27, aquí los pasos para hacer una versión estática desde dudo que su distribución tiene api sqlite BdB.

Descargar 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 

obtener una copia de pySqlite2 de http://code.google.com/p/pysqlite/, he utilizado un pago y envío Hg. En setup.cfg añadir en la sección build_ext (No hay todavía dos líneas comentadas pueden volver a utilizarse)

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

luego cd en pysqlite:

python setup.py build 
python setup.py install 

o sin necesidad de instalar:

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

gracias por la solución de Linux ... también necesito una solución de Windows ... – Merlin

3

De acuerdo con OracleBSDDB documentation, puede forzar que BsdDB genere una biblioteca de reemplazo sqlite3, luego (en teoría) podrá usar esta biblioteca en reemplazo de la biblioteca estándar sqlite3, y luego usar el módulo sqlite3 python.

Sin embargo, tenga en cuenta que utiliza la versión de BsdDB compatible con SQLite API bajo el SleepyCat License que le obligará a pagar tarifas a Oracle O ser un proyecto de código abierto (ninguna de esas soluciones es realmente mala, pero tiene elegir).

+0

En cuanto a las tarifas, ¿qué debo hacer si uso BSDDB solo? ¿Tendré que pagar una tarifa? No es BSDDB de código abierto, similar a MySQL. – Merlin

+0

@Merlin: actualicé mi respuesta con un enlace a la licencia BsdDB. –

4

Construir y amalgamar bibliotecas en win32 es un desafío :)

Mi supuestos:

  • python27 (tengo ActiveState pitón pero python.org debería estar bien) en c: \ python27
  • Visual Studio 2010 Professional (creo que expreso debería funcionar también)

Descargar BdB y pysqlite (esta vez tengo 2.6.3) y colocarlo en c:\bdb, de desempaquetado bdb por lo que tendrá

C:\bdb\db-5.2.36 

van de la C:\bdb\db-5.2.36\build_windows recoger Berkeley_DB_vs2010.sln, seleccione Static Release como la configuración y construir

es necesario tener libdb52s.lib y libdb_sql52s.lib en

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

ahora desempaquetar pysqlite en c:\bdb, entre C:\bdb\pysqlite-2.6.3 y d edición setup.cfg de la siguiente manera:

[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 

asegúrese de remover las bibliotecas = he tenido que añadir a setup.py, causa de enlace estática tenemos que especificar más de una biblioteca, si alguien conoce una manera para especificar una lista de setup.cfg, por favor dígame :)

abierto setup.py van en la línea 191 y reemplazar:

libraries=libraries 

con:

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

símbolo del sistema VS2010 abierta (en Visual Studio Tools menú)

ir en 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 "Construir y amalgamar bibliotecas en win32 es un desafío :)" – Merlin

Cuestiones relacionadas