在python3 sqlite中加载sqlite3扩展

时间:2018-09-20 02:00:18

标签: python python-3.x sqlite

如何正确将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更新为最新版本

2 个答案:

答案 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.dllc:\WINDOWS\环境变量中的某个其他文件夹。 然后,您将可以使用简单的命令加载扩展程序:

PATH