如何正确将sqlite扩展加载到python sqlite导入中?
操作系统:Windows 7 64bit
sqlite3版本:3.14.1 64bit
python3版本:3.5.2 64bit
到目前为止,这是我的流程: 使用以下命令将extension-functions.c编译为libsqlitefunctions.dll:
gcc -shared -I "C:\Software\sqlite3\sqlite-master" -o libsqlitefunctions.dll extension-functions.c
然后我可以使用以下命令在sqlite3命令行中愉快地使用这些功能:
SELECT load_extension('libsqlitefunctions.dll');
但是在尝试使用python脚本时:
import sqlite3 as lite
con = lite.connect(db_file)
con.enable_load_extension(True)
con.load_extension("<<path to file>>\\libsqlitefunctions.dll")
出现此错误:
错误找不到指定的模块。 :
extension-functions.c文件的确包含COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE部分,实际上,在使用命令行sqlite3时它可以很好地加载
附加说明:
python sqlite软件包已安装并正常运行。
我还尝试将python路径中的sqlite3.dll更新为最新版本
答案 0 :(得分:0)
这不是一个很好的答案,但是它提供了一种在python中使用扩展名的方法。
将sql命令输出到文件,然后使用子进程将文件直接运行到命令行中,如下所示:
import subprocess
import uuid
import os
db_file = "trial02.db"
sqlite_functions_file = "libsqlitefunctions.dll"
sql_file = uuid.uuid4() + ".sql"
with open(sql_file, 'w') as fsql:
fsql.write('/* auto script */\n\n')
#load extension
sql = "SELECT load_extension('" + sqlite_functions_file + "');"
fsql.write(sql + '\n')
#sql scripts
sql = "insert into t(c) values (log(2));"
fsql.write(sql + '\n')
args = [
'sqlite3'
, db_file
, '< ', sql_file
]
print(' '.join(args))
out1 = subprocess.run(' '.join(args), shell=True)
os.remove(sql_file)
答案 1 :(得分:0)
将supersonic@ubuntu-vBox:~$ arm-none-eabi-gcc -o hello_arm_none-eabi hello.c --specs=nosys.specs -mcpu=arm920t -march=armv4t
放在一个全局可见的文件夹中,例如libsqlitefunctions.dll
或c:\WINDOWS\
环境变量中的某个其他文件夹。
然后,您将可以使用简单的命令加载扩展程序:
PATH