Dear all, I'm fighting with sqlite/spatialite since some days. I want to use GeoAlchemy with sqlite/spatialite - but I think my problem starts at SQLAlchemy.
I can connect/create sqlite database without any problem. Furthermore, I'm able to connect to a sqlite/spatialite database and load spatialite extension directly with pysqlite2 (see example below). Moreover, I can run the untitest for spatialite of GeoAlchemy successfully. But, this untitest uses only a memory database. When I change this to a database stored on disk (an already existing as well a non-extisting one) I'm getting an error (on Windows as well as Linux [Ubuntu]) at connection.enable_load_extension(True). It tells me: pysqlite2.dbapi2.ProgrammingError: Cannot operate on a closed database. I tested relative and absolute paths (on both, Windows and Ubuntu) but without any success. I know that the error message is produced by pysqlite2, but, as there is no problem in extension loading using the pysqlite2 library directly, I assume that the problem should be found in sqlalchemy and its connection/engine initializing. But maybe there is no real problem and I only missed something (e.g. opening some kind of connection to the database). Any help would be appreciated. Many thanks in advance. Best wishes, Jan ------------------------------------------------------------------------------------------------------------------------------ Here is a small example using sqlalchemy: from sqlalchemy import (create_engine, MetaData) from pysqlite2 import dbapi2 as sqlite # this is the line for using the memory database (runs without any error) #engine = create_engine('sqlite://', module=sqlite, echo=True) # this is for a relative path on Windows and Ubuntu (ends up in an error at enable_load_extension) #engine = create_engine('sqlite:///testdb.sqlite', module=sqlite, echo=True) # this is for an absolute path on Windows (ends up in an error at enable_load_extension) #engine = create_engine('sqlite:///C:\\testdb.sqlite', module=sqlite, echo=True) # this is for an absolute path on Ubuntu (ends up in an error at enable_load_extension) engine = create_engine('sqlite:////usr/home/jthiele/testdb.sqlite', module=sqlite, echo=True) connection = engine.raw_connection().connection # the following line end up in an error (pysqlite2.dbapi2.ProgrammingError: Cannot operate on a closed database.) # when not using the memory database: connection.enable_load_extension(True) # this will only be reached when using the memory database metadata = MetaData(engine) session = sessionmaker(bind=engine)() # this for Windows: #session.execute("select load_extension('libspatialite-1.dll')") # this for Ubuntu: session.execute("select load_extension('/usr/lib/libspatialite.so')") session.execute("SELECT InitSpatialMetaData()") connection.enable_load_extension(False) ... --------------------------------------------------------------------------------------------------------- Here is the working example with pysqlite2 (directly): from pysqlite2 import dbapi2 as sqlite DB = sqlite.connect('C:\\testdb.sqlite') DB.enable_load_extension(True) DB.execute('SELECT load_extension("libspatialite-2.dll")') DBCursor = DB.cursor() DBCursor.execute("SELECT * FROM LK_Goettingen_DLM25") for row in DBCursor: print row DBCursor.close() DB.close() ------------------------------------------------------------------------------------------------------------ These are the versions used: On Windows XP: Python 2.7.2 pysqlite 2.6.3 sqlalchemy 0.7.5 sqlite 3.7.10 spatialite 2.3.1 On Ubuntu 11.10: Python 2.7.2 pysqlite 2.6.3 sqlalchemy 0.7.5 sqlite 3.7.7 spatialite 2.4.0 -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.