gpt4 book ai didi

python-3.x - 如何使用带有 Python 3.7 的 sqlite3 python 模块的 FTS5 扩展?

转载 作者:行者123 更新时间:2023-12-04 18:31:27 27 4
gpt4 key购买 nike

如何使用 FTS5扩展名为 sqlite3带有 Python 3.7 的 python 模块?

我尝试使用 python testFTS5.py 在 Python 中运行以下代码:

import sqlite3
conn = sqlite.connect('some_db.db')
sqlite.enable_load_extension(True)
sqlite.load_extension('fts5')

这导致错误消息:
Traceback (most recent call last):
File "./src/test.py", line 3, in <module>
sqlite.enable_load_extension(True)
AttributeError: module 'sqlite3' has no attribute 'enable_load_extension'

我试过 sqlite.load_extension('FTS5')sqlite.load_extension('ENABLE_FTS5')但不出所料,它会产生相同的错误消息(未找到相应的文件名)。我还尝试使用 LD_LIBRARY_PATH=/usr/local/bin python testFTS5.py 运行代码但我收到相同的错误消息。

我查了 sqlite3通过在终端中运行以下代码来定位:
derno@ompn:/mnt/ilcompn0d1/user/dernonco/fts-test$ which sqlite3
/usr/local/bin/sqlite3

我列出了已安装的 sqlite3扩展:
derno@ompn:/mnt/ilcompn0d1/user/dernonco/fts-test$ sqlite3
SQLite version 3.18.0 2017-03-28 18:48:43
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> pragma compile_options;
COMPILER=gcc-5.4.0 20160609
DEFAULT_SYNCHRONOUS=2
DEFAULT_WAL_SYNCHRONOUS=2
ENABLE_FTS5
ENABLE_RTREE
SYSTEM_MALLOC
THREADSAFE=1

这似乎表明 FTS5 在我的 /usr/local/bin/sqlite3 中可用版本。

但是,当我运行时
import sqlite3

con = sqlite3.connect(':memory:')
cur = con.cursor()
cur.execute('pragma compile_options;')
available_pragmas = cur.fetchall()
con.close()

print(available_pragmas)

它输出:
[('COMPILER=gcc-5.4.0 20160609',), ('DEFAULT_SYNCHRONOUS=2',), ('DEFAULT_WAL_SYNCHRONOUS=2',), 
('ENABLE_FTS3',), ('ENABLE_RTREE',), ('SYSTEM_MALLOC',), ('THREADSAFE=1',)]

没有 ENABLE_FTS5在那个列表中。

我尝试使用 Python 3.7.6(默认,2019 年 12 月 19 日,23:49:42)和 Python 3.6.7(默认,2018 年 10 月 25 日,09:16:13)。

最佳答案

您可以调用 .enable_load_extension(True).load_extension('fts5')在连接对象上,而不是在模块上。

但是,这不是必需的,因为——正如您所看到的——您的安装支持全文搜索。

您可以通过以下方式对其进行测试以确保确定:

import sqlite3 

conn = sqlite3.connect(':memory:')
conn.execute("""create virtual table fts5test using fts5 (data);""")
conn.execute("""insert into fts5test (data)
values ('this is a test of full-text search');""")
conn.execute("""select * from fts5test where data match 'full';""").fetchall()

结果:
In [67]: conn.execute("""select * from fts5test where data match 'full';""").fetchall()
Out[67]: [('this is a test of full-text search',)]

关于python-3.x - 如何使用带有 Python 3.7 的 sqlite3 python 模块的 FTS5 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60244988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com