Python SQLAlchemy SQLite FTS unicode6.1标记生成器

时间:2015-11-05 04:03:17

标签: python sqlite unicode sqlalchemy full-text-search

这是使用unicode61 tokenizer在FTS表上尝试使用SQLiteche数据库进行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'

...... frick。

然而:

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

如何让Python或SQLAlchemy特别引用更现代甚至是自定义编译的sqlite3二进制文件?

附加说明:我正在尝试在OSX(10.10.5优胜美地)系统上运行,因此我可以告诉SQLAlchemy和Python正在引用pysqlite,它是sqlite3.dylib的dbapi2包装器。我刚刚找到了以下文章,我将尝试并返回结果。

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

到目前为止

结果

  • 在准备中重命名/usr/lib/libsqlite3.dylib以替换它 自定义构建将使用OSX并且您需要执行系统 恢复。所以我打算尝试一种virtualenv方法。

  • 这个SO问题试图替换a中链接的sqlite3库 virtualenv但我还没弄清楚如何应用它 SQLAlchemy的 How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?

1 个答案:

答案 0 :(得分:0)

来自此StackOverflow的答案答案:

  

https://stackoverflow.com/a/1546162/622276

  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指向SQLite包装器的site-package特定pysqlite2以及提供的静态库。
  12. 最后:

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