簡體   English   中英

在python3 sqlite中加載sqlite3擴展

[英]Load sqlite3 extension in python3 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更新為最新版本

這不是一個很好的答案,但是它提供了一種在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\\PATH環境變量中的某些其他文件夾。 然后,您將可以使用簡單的命令加載擴展:

con.load_extension("libsqlitefunctions.dll")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM