Python SQLAlchemy SQLite FTS unicode6.1 分词器

Python SQLAlchemy SQLite FTS unicode6.1 tokenizer

这是在具有使用 unicode61 分词器的 FTS 表的 SQLite3 数据库上尝试 SQLAlchemy 数据库反射的代码:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///database.sqlite')
Base = declarative_base()
metadata = Base.metadata
metadata.reflect(bind=engine, views=True)

这个错误:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unknown tokenizer: unicode61

从 v3.8.6 开始,默认包含此分词器,并且不可选编译。

v3.8.6 The unicode61 tokenizer is now included in FTS4 by default.

同时当我 运行:

$ python
>>> import sqlite3
>>> sqite3.sqlite_version
'3.8.5'

...该死的。

但是:

$ sqlite3
SQLite version 3.9.2 2015-11-02 18:31:45

我如何获取 Python 或 SQLAlchemy 以引用更现代甚至自定义编译的 sqlite3 二进制文件?

补充说明:我正在尝试在 OSX (10.10.5 Yosemite) 系统上 运行可以告诉 SQLAlchemy 和 Python 正在引用 pysqlite,它是 sqlite3.dylib 的 dbapi2 包装器。我刚刚找到了以下文章,我将尝试使用我的结果 return。

http://sqlite.1065341.n5.nabble.com/How-to-build-a-new-sqlite3-dylib-td63635.html

到目前为止的结果

来自这个 Whosebug 答案的答案:

  1. https://pypi.python.org/pypi/pysqlite
  2. 下载 pysqlite2 源代码
  3. 下载最新的 SQLite 合并源代码(撰写本文时为 v3.9.2)http://www.sqlite.org/download.html (sqlite-amalgamation-3XXXXXX.zip)
  4. 提取 pysqlite2 源代码。
  5. 提取sqlite3合并源代码。
  6. sqlite3 源代码复制到您提取 pysqlite2 的根目录中,例如 path-to/pysqlite-2.X.X.
  7. cd path-to/pysqlite-2.X.X
  8. python setup.py build_static

    这将获取您转储到文件夹中的 sqlite3 源代码,并使用 pysqlite2 模块构建一个静态库。

  9. 这需要一分钟时间,但是会有一个新目录 build,里面会有一个类似 lib.macosx-10.10-intel-2.7 的文件夹。在里面你在 pysqlite2 文件夹之后。

    例如。 path-to/pysqlite2.X.X/build/lib.macosx-10.10-intel-2.7/pysqlite2

  10. 注意:执行以下操作需要您自担风险。尽可能使用 virtulenv。将此 pysqlite2 文件夹复制到 /Library/Python/2.7/site-packages/ 并覆盖现有包。

  11. SQLAlchemy 指向这个特定的 site-package of pysqlite2 用于 SQLite 包装器以及提供的静态库。

最后:

$ python
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.5'
>>> from pysqlite2 import dbapi2 as sqlite3
>>> sqlite3.sqlite_version
'3.9.2'