sqlite3
apoyo en Python puede ser un poco confuso. El adaptador de base de datos sqlite comenzó como un proyecto separado, pysqlite2, pero para Python 2.5 se incorporó una versión de la biblioteca estándar de Python con el nombre sqlite3. El adaptador original continúa desarrollándose como ese proyecto separado, mientras que periódicamente la versión en Python se actualiza para que coincida. Si está intentando utilizar una versión más reciente del adaptador, por lo general se instala como pysqlite2
para no entrar en conflicto con la versión incluida en la biblioteca estándar. Y, dependiendo de cómo fue construido, puede vincular a una versión diferente del sqlite3 database library subyacente. Así que asegúrese de que está importando correctamente:
>>> import sqlite3
>>> sqlite3.version_info
(2, 4, 1)
>>> sqlite3.sqlite_version_info
(3, 6, 11)
>>> from pysqlite2 import dbapi2 as sqlite3
>>> sqlite3.version_info
(2, 5, 5)
>>> sqlite3.sqlite_version_info
(3, 6, 18)
version_info
es la versión de la sqlite3
(pysqlite2
o incorporada sqlite3
) adaptador de la base de datos. sqlite_version_info
es la versión de la biblioteca de base de datos subyacente sqlite3
.
Se recomienda usar from ... import ... as sqlite3
para que el resto de su código no tenga que cambiar si pasa de una versión a otra.
Nota, enable_load_extension
apareció por primera vez en pysqlite2
2.5.0.
EDIT:enable_load_extension
está deshabilitado de forma predeterminada al compilar el adaptador. Para habilitarlo, puede compilar manualmente pysqlite2
. La siguiente receta asume un sistema unix
-y y la última versión de pysqlite2
, que a partir de este momento es 2.5.5.
En primer lugar, si ha instalado el adaptador originalmente a través de easy_install
, desinstala por primera ejecución:
$ sudo /path/to/easy_install -m pysqlite # or whatever package name you first used
Habrá alguna salida desde que la inclusión de líneas como:
Removing pysqlite 2.5.5 from easy-install.pth file
Using /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg
Retire el huevo usando el nombre del archivo listado (el nombre variará según su plataforma y versión y puede referirse a un archivo o directorio):
$ sudo rm -r /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg
Ahora descargar y extraer el archivo tar pysqlite-2.5.5
fuente:
$ mkdir /tmp/build
$ cd /tmp/build
$ curl http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.5/pysqlite-2.5.5.tar.gz | tar xz
$ cd pysqlite-2.5.5
luego editar el archivo setup.cfg
a comentar la Directiva SQLITE_OMIT_LOAD_EXTENSION
:
$ ed setup.cfg <<EOF
> /SQLITE_OMIT_LOAD_EXTENSION/s/define=/#define=/
> w
> q
> EOF
Desde la versión de sqlite3
es tan viejo (3.4.0), también debería compilar con la última biblioteca sqlite3
. Esto es fácil en el guión pysqlite2
setup.py:
$ /path/to/python2.x setup.py build_static
Esto descargará automáticamente la última sqlite3 amalgamation source y construir el adaptador junto con una versión actualizada vinculados estáticamente de sqlite3
. Este paso puede tomar un tiempo largo para terminar.
ACTUALIZACIÓN (21/07/2015): Según el último pysqlite 2.6.3 commit que tiene que descargar el código fuente sqlite por sí mismo y los puso en la carpeta raíz pysqlite.
Ahora, instalar el adaptador:
$ sudo /path/to/python2.x setup.py install
y ejecutar las pruebas:
$ cd # somewhere out of the build directory
$ /path/to/python2.x
>>> from pysqlite2 import test
>>> test.test()
y, si pasan, usted debe estar todo listo.
Como beneficio adicional, si la razón por la que quiere apoyo a la extensión de carga es utilizar sqlite3
's extensión de búsqueda de texto completo, FTS3
, usted debe encontrar que estaba incluido como parte de la biblioteca estática y no es necesario seguir trabajando:
>>> from pysqlite2 import dbapi2 as sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.execute("create virtual table recipe using fts3(name, ingredients)")
<pysqlite2.dbapi2.Cursor object at 0xca5e0>
Estimado Ned: Esto seguramente me ha ayudado mucho - ¡gracias! Ahora mi script de python parece cargar la versión más reciente del adaptador después de usar la construcción 'from ... import ... as sqlite3', ya que obtengo 2.5.5 para version_info y 3.4.0 para sqlite_version. Sin embargo, una línea más, trato de usar 'enable_load_extension' y ahora obtengo: AttributeError: el objeto 'pysqlite2.dbapi2.Connection' no tiene ningún atributo 'enable_load_extension' Por toda la información que me ha dado esto parece ser sorprendente , ¿no? Muchas gracias por su ayuda hasta el momento, ¡realmente apreciada! --Albert – Albert
¡Maldición! He expandido la respuesta para incluir cómo construir el adaptador con soporte de extensión de carga habilitado y con una versión actualizada de la biblioteca sqlite3. –
Ned, gracias por su rápida respuesta. He seguido tus instrucciones literalmente. Mi sistema ahora tiene la última versión de sqlite3. Sin embargo, si escribo 'desde pysqlite2 import test', aparece el siguiente error: desde pysqlite2._sqlite import * ImportError: dlopen (/Library/Python/2.5/site-packages/pysqlite2/_sqlite.so, 2) : Símbolo no encontrado: _sqlite3_enable_load_extension referencia desde: /Library/Python/2.5/site-packages/pysqlite2/_sqlite.so esperado en:. dinámicas de búsqueda :(, lo siento que te moleste de nuevo con esto me siento muy cerrar ahora ... Muchas gracias (!) por toda tu ayuda hasta ahora, Albert – Albert