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
到目前为止的结果:
重命名 /usr/lib/libsqlite3.dylib
准备用
自定义构建将变砖 OSX,您需要执行系统
恢复。所以我打算尝试使用 virtualenv 方法。
This SO question try to replace the sqlite3 library linked in a
virtualenv
但我还不知道如何将其应用到
SQL炼金术
How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?
来自这个 Whosebug 答案的答案:
- 从 https://pypi.python.org/pypi/pysqlite
下载 pysqlite2
源代码
- 下载最新的 SQLite 合并源代码(撰写本文时为 v3.9.2)http://www.sqlite.org/download.html (sqlite-amalgamation-3XXXXXX.zip)
- 提取
pysqlite2
源代码。
- 提取
sqlite3
合并源代码。
- 将
sqlite3
源代码复制到您提取 pysqlite2
的根目录中,例如 path-to/pysqlite-2.X.X
.
cd path-to/pysqlite-2.X.X
python setup.py build_static
这将获取您转储到文件夹中的 sqlite3
源代码,并使用 pysqlite2
模块构建一个静态库。
这需要一分钟时间,但是会有一个新目录 build
,里面会有一个类似 lib.macosx-10.10-intel-2.7
的文件夹。在里面你在 pysqlite2
文件夹之后。
例如。 path-to/pysqlite2.X.X/build/lib.macosx-10.10-intel-2.7/pysqlite2
注意:执行以下操作需要您自担风险。尽可能使用 virtulenv
。将此 pysqlite2
文件夹复制到 /Library/Python/2.7/site-packages/
并覆盖现有包。
- 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'
这是在具有使用 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
到目前为止的结果:
重命名
/usr/lib/libsqlite3.dylib
准备用 自定义构建将变砖 OSX,您需要执行系统 恢复。所以我打算尝试使用 virtualenv 方法。This SO question try to replace the sqlite3 library linked in a
virtualenv
但我还不知道如何将其应用到 SQL炼金术 How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?
来自这个 Whosebug 答案的答案:
- 从 https://pypi.python.org/pypi/pysqlite 下载
- 下载最新的 SQLite 合并源代码(撰写本文时为 v3.9.2)http://www.sqlite.org/download.html (sqlite-amalgamation-3XXXXXX.zip)
- 提取
pysqlite2
源代码。 - 提取
sqlite3
合并源代码。 - 将
sqlite3
源代码复制到您提取pysqlite2
的根目录中,例如path-to/pysqlite-2.X.X
. cd path-to/pysqlite-2.X.X
python setup.py build_static
这将获取您转储到文件夹中的
sqlite3
源代码,并使用pysqlite2
模块构建一个静态库。这需要一分钟时间,但是会有一个新目录
build
,里面会有一个类似lib.macosx-10.10-intel-2.7
的文件夹。在里面你在pysqlite2
文件夹之后。例如。
path-to/pysqlite2.X.X/build/lib.macosx-10.10-intel-2.7/pysqlite2
注意:执行以下操作需要您自担风险。尽可能使用
virtulenv
。将此pysqlite2
文件夹复制到/Library/Python/2.7/site-packages/
并覆盖现有包。- SQLAlchemy 指向这个特定的
site-package
ofpysqlite2
用于 SQLite 包装器以及提供的静态库。
pysqlite2
源代码
最后:
$ python
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.5'
>>> from pysqlite2 import dbapi2 as sqlite3
>>> sqlite3.sqlite_version
'3.9.2'