2
4

1 回答 1

1

这两篇文章(Force Python to forego native sqlite3 and use the (installed) latest sqlite3 version and http://charlesleifer.com/blog/using-the-sqlite-json1-and-fts5-extensions-with-python/)可以成为问题的解决方案。

尝试以下步骤:

  1. 下载 SQLite 源代码并在启用 FTS5 的情况下构建它。

    $ wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz
    $ tar xvzf sqlite-autoconf-3310100.tar.gz
    $ cd sqlite-autoconf-3310100
    $ CFLAGS="-DSQLITE_ENABLE_FTS5" ./configure
    $ make sqlite3.c
    
  2. 在继续之前,您可能需要激活您的虚拟环境。

    $ source <path to Python3.7 virtual environment>/bin/activate
    (python37env) $
    
  3. 本文作者(http://charlesleifer.com/blog/using-the-sqlite-json1-and-fts5-extensions-with-python/)将 Python 3 中的 SQLite3 DB-API 2.0 驱动程序作为一个单独的包(在此处输入链接描述)。所以你可以用它来代替原来的驱动程序。

    (python37env) $ wget https://github.com/coleifer/pysqlite3/archive/0.4.2.tar.gz
    (python37env) $ tar xvzf 0.4.2.tar.gz
    (python37env) $ cd pysqlite3-0.4.2
    (python37env) $ cp <path to sqlite-autoconf-3310100>/sqlite3.h .
    (python37env) $ cp <path to sqlite-autoconf-3310100>/sqlite3.c .
    (python37env) $ python setup.py build_static build
    (python37env) $ python setup.py install
    

    现在,应该将单独的 pysqlite 模块安装到您的虚拟环境中。

  4. 测试一下。而不是import sqlite3用于导入 pysqlite3 模块,使用from pysqlite3 import dbapi2 as sqlite3. 这将从自定义 pysqlite 模块导入 SQLite3 DB-API 2.0 驱动程序。您的测试代码将如下所示:

    # import sqlite3
    from pysqlite3 import dbapi2 as 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()
    

此方法适用于我的带有 Python 3.7.3 的 Ubuntu 16.04 VM。

于 2020-04-04T03:08:11.830 回答