我正在编写一个在Windows 8.1 Pro 64位上使用sqlite3模块的Python程序。
当我尝试加载sqlite扩展时,会引发sqlite3.OperationalError(无法找到指定的过程)。
Python版本为3.3.5 for Windows 64bit,来自www.python.org。
因为我认为当得到的DLL与Python 3.3.x一起使用时,sqlite3.dll应该更好地与msvcr100.dll链接而不是MinGW默认的msvcrt.dll,我制作了一个spec文件来链接msvcr100dll,并构建了sqlite3。使用devkit MinGW 64bit的dll和sqlite3.exe如下。
的devkit-mingw64-64-4.7.2-20130224-1432-sfx.exe
http://rubyinstaller.org/downloads/
SQLite源是sqlite-amalgamation-3080403.zip
http://www.sqlite.org/download.html
x86_64-w64-mingw32-gcc -dumpspecs | sed "s/-lmsvcrt/-lmsvcr100/" > msvcr100.spec
x86_64-w64-mingw32-gcc -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -O2 -shared -o sqlite3.dll -Wl,--out-implib=libsqlite3.dll.a -specs=msvcr100.spec sqlite3.c
x86_64-w64-mingw32-gcc -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -O2 -o sqlite3.exe -specs=msvcr100.spec shell.c libsqlite3.dll.a
在example.py中:
import sqlite3
con = sqlite3.connect(":memory:")
# enable extension loading
con.enable_load_extension(True)
# Load the fulltext search extension
con.load_extension("./sqlite3.dll")
python example.py
Traceback (most recent call last):
File "example.py", line 23, in <module>
con.load_extension("./sqlite3.dll")
sqlite3.OperationalError: 指定されたプロシージャが見つかりません。
最后一条日语消息表示找不到指定的程序。
修改
我发现用新构建的sqlite3.dll替换Python附带的原始sqlite3.dll(在Python33 \ DLLs中)就足够了。
您不需要执行enable_load_extension()或load_extension()。
你可以马上做这样的事情。
con.execute("create virtual table recipe using fts3(name, ingredients)")