Python3中加载sqlite3扩展

2024-09-30 00:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何正确地将sqlite扩展加载到PythonSQLite导入中?在

操作系统:Windows 7 64位
sqlite3版本:3.14.1 64位
python3版本:3.5.2 64位

以下是我目前为止的流程: 将扩展函数.c编译到libsqlitefunctions.dll使用此命令:

gcc -shared -I "C:\Software\sqlite3\sqlite-master" -o libsqlitefunctions.dll extension-functions.c

然后我可以很高兴地使用以下命令在sqlite3命令行中使用这些函数:

^{pr2}$

但是,在python脚本中尝试时:

import sqlite3 as lite
con = lite.connect(db_file)
con.enable_load_extension(True)
con.load_extension("<<path to file>>\\libsqlitefunctions.dll")

出现此错误:

Error The specified module could not be found. :

extension functions.c文件确实包含COMPILE SQLITE_EXTENSIONS_AS_LOADABLE_MODULE部分,事实上,当使用命令行sqlite3时,它可以很好地加载

附加说明:
python-sqlite包已安装并正常工作。
我还尝试将python路径中的sqlite3.dll更新到最新版本


Tags: 函数命令行命令版本sqliteextensionloadlite
2条回答

这不是一个好的答案,但是它提供了一个在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)

libsqlitefunctions.dll放在全局可见的文件夹中,例如c:\WINDOWS\或{}环境变量中的其他文件夹。 然后您就可以使用简单的命令加载扩展:

con.load_extension("libsqlitefunctions.dll")

相关问题 更多 >

    热门问题