8 votos

SQLite y Python 2.7 Spatialite

Estoy tratando de habilitar espacialmente mi base de datos sqlite:

import sqlite3
db = r'c:\temp\mydata.sqlite'
conn = sqlite3.connect(db)
conn.enable_load_extension(True)
cur = conn.cursor()
cur.execute(r"SELECT load_extension("<path>\libspatialite-4.dll");")
conn.commit()
conn.close()
del conn

Python sólo deja de funcionar al ejecutar este código. No fallo en windows 7 x 64, solo se cierra. Es muy extraño. No se produce ningún error.

Cuando ejecuto los comandos directamente python.exe en el comando propmpt, veo estrellarse de python:spatialite crashing python

¿Estoy haciendo algo mal?

Gracias

4voto

gappy3000 Puntos 211

La versión de sqlite3.dll incluido con Python no parecen querer jugar bien con Spatialite. La única cosa que podía llegar a su trabajo (corto de compilar todo de la fuente) fue:

  1. Descargar SQLite (o cyqlite - una recompilación de SQLite para Windows con algunas características útiles habilitado, tales como el R-Tree, de modo que usted puede hacer spaital índices), es decir, sqlite-dll-win32-x86-[version].zip
  2. Descargar mod_spatialite (Windows los archivos binarios en el cuadro rosa en la parte inferior de la página), es decir, mod_spatialite-[version]-win-x86.7z
  3. Descomprimir primero SQLite/cyqlite luego mod_spatialite en la misma carpeta (sobrescribir si hay conflictos)
  4. Agregar esta carpeta a la Ruta de acceso del sistema
  5. Cambiar el nombre de la sqlite3.dll que está en su Python Dll del directorio, a algo como sqlite3_old.dll, por lo que Python va a utilizar el nuevo uno en el camino

Ver esta entrada del blog para más información.

2voto

znq Puntos 143

este hilo puede ser un poco viejo pero me encontré con algo parecido cuestión de un par de meses atrás

creo que este post fue también relacionados con el Sqlite, Python 2.7 y Spatialite

terminé de encontrar otro que la generación de libspatialite-4.dll aquí http://latuviitta.org/documents/Spatialite_4.0_test_with_jre_1.6.zip aunque también es etiquetado como "prueba"...

después de realizar esta compilación de libspatialite-4 en mi python27/Dll, parecía funcionar.

1voto

Mephisztoe Puntos 1182

Prueba esto, por favor:

cur.execute(r'SELECT load_extension("<path>\libspatialite-4.dll");')

en vez de su cur.execute línea

Y esta, también. Solucionó poniendo todos los archivos dll en la carpeta System32 en Windows 7 - 64 bits.

1voto

David Holm Puntos 6165

¿Seguro que tienes el nombre de la biblioteca correcta?

Para Python 2.7 y Spatialite 4 que vienen con el ArcGIS Desktop 10.2 que tengo que hacer lo siguiente:

import sqlite3

db = sqlite3.connect(dbpath)
db.enable_load_extension(True)
db.load_extension('spatialite400x.dll')

Creo que db.load_extension y ejecutar la función en SQL debe tener el mismo efecto, pero siempre utilizo load_extension .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X