我需要在x64窗口下创建和访问一个spaceite扩展的SQLite数据库.
我已经下载了所谓的最新版本1.0.92.0 sqlite-netFx45-static-binary-bundle-x64-2012-1.0.92.0.zip
的System.Data.SQLite.它是从我的Visual Studio(2012)项目中引用的,并且它本身似乎工作得很好.
我还有最新的预编译x64 spatiaLite版本4.1.1,名为spatialite-4.1.1-DLL-win-amd64.zip来自spatialite的所有dll都存在于执行目录中.
当我尝试加载扩展时:
using (var conn = new SQLiteConnection("Data Source=\"" + _sqLiteFullName + "\""))
{
conn.Open();
conn.EnableExtensions(true);
conn.LoadExtension("libspatialite-4.dll");
...
}
Run Code Online (Sandbox Code Playgroud)
我得到一个AccessViolationException(试图读取受保护的内存.这通常表明其他内存已损坏)LoadExtension()
.
我注意到使用PE Deconstructor(确定dll/exe的bitnewss的软件),它说我的System.Data.SQLite.dll(来自x64包)的副本实际上是32位.那是问题吗?
我该如何解决这个问题?
有没有其他人让spatiaLite在x64上工作?
我知道之前有过类似的问题.但是,我在此发现的所有问题都涉及一些非常具体的系统设置,这些设置不适合我(因为我的也是如此).
系统:
如何激活' spatialite
sqlite3'模块的扩展名?
我尝试了什么(类似问题的其他人说它有效的方式):
然后,跑步
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("libspatialite-2.dll")')
Run Code Online (Sandbox Code Playgroud)
给
conn.execute("SELECT load_extension('libspatialite-2.dll')")
sqlite3.OperationalError: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
我还能尝试做些什么呢?
我spatialite
为Django
项目安装了,但是当我尝试迁移时它向我显示此错误:
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/contrib/gis/db/backends/spatialite/base.py", line 44, in get_new_connection
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: SpatiaLite requires SQLite to be configured to allow extension loading.
Run Code Online (Sandbox Code Playgroud)
我不知道如何弄清楚。我 通过更改 libexec/setuptools/setup.cfg 文件来尝试此操作
[build_ext]
#define=
include_dirs=/Library/Frameworks/SQLite3.framework/unix/include
library_dirs=/Library/Frameworks/SQLite3.framework/unix/lib
libraries=sqlite3
#define=SQLITE_OMIT_LOAD_EXTENSION
Run Code Online (Sandbox Code Playgroud)
我已经通过brew安装了spatialite,然后我像这样更改了settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
SPATIALITE_LIBRARY_PATH='/usr/local/lib/mod_spatialite.dylib'
Run Code Online (Sandbox Code Playgroud)