相关疑难解决方法(0)

在Debian上升级Python的sqlite3

我在我的Debian上的linux2上使用Python 2.7.6(默认,2014年3月22日,22:59:56)[GCC 4.8.2],我通常使用模块sqlite3没有任何问题.

我编译了一个Sqlite扩展 spellfix,加载时出现此错误:

sqlite3.OperationalError:./spellfix.so:未定义的符号:sqlite3_malloc64

我想这可能是因为sqlite3模块太旧了:

import sqlite3
print sqlite3.version          # 2.6.0
print sqlite3.sqlite_version   # 3.8.2
Run Code Online (Sandbox Code Playgroud)

(在sqlite3.sqlite_version3.8.7.x的另一台机器上,扩展加载正常).

我试过了:

pip install --upgrade pysqlite
Run Code Online (Sandbox Code Playgroud)

但它仍然是相同的:sqlite3.sqlite_version保持3.8.2.

如何升级Python sqlite3模块(内置于标准库中)?

python sqlite debian pip

8
推荐指数
1
解决办法
1960
查看次数

如何在sqlite where子句中使用Levenshtein距离函数?

我正在尝试实施“您的意思是?” 某种搜索功能。

我正在尝试使用使用ruby编写的levenshtein函数进行查询。我想知道如何在sqlite3查询中使用此功能。我在想可能是这样的:

@results = the_db.where('levenshtein(name, ?) <= 3', searchphrase)

但是我不确定如何使它工作。有人可以帮我吗?

sqlite ruby-on-rails levenshtein-distance

7
推荐指数
1
解决办法
3580
查看次数

如何在 Django 的 sqlite3 数据库中使用全文搜索?

我正在使用 sqlite3 数据库开发 django 应用程序,该应用程序具有固定的数据库内容。固定我的意思是数据库的内容不会随着时间的推移而改变。该模型是这样的:

class QScript(models.Model):
    ch_no = models.IntegerField()
    v_no = models.IntegerField()
    v = models.TextField()
Run Code Online (Sandbox Code Playgroud)

表中有大约 6500 条记录。给定一个可能缺少某些单词或拼写错误的文本,我需要确定它的ch_no和v_no。例如,如果vdb 中有一个字段,其中包含文本"This is an example verse",则给定的文本,如"This an egsample verse"应该给我ch_no和v_nofrom db。我相信这可以使用全文搜索来完成。

我的查询是:

  1. 全文搜索可以做到这一点吗?根据我的研究,我猜测它可以,正如在sqlite3 页面中所说:全文搜索是“Google、Yahoo 和 Bing 对放置在万维网上的文档所做的事情”。在 SO 中引用,我也阅读了这篇文章以及许多其他文章,但没有找到任何与我的要求非常匹配的内容。

  2. 如何在 Django 模型中使用 FTS?我读了这个,但没有帮助。似乎太过时了。在此处阅读:“...需要直接操作数据库以添加全文索引”。搜索主要提供与 MySQL 相关的信息,但我需要在 sqlite3 中进行。那么如何在 sqlite3中进行直接操作呢?


编辑:

我选择坚持使用 sqlite3 是否正确?或者我应该使用不同的东西(比如 …

python sqlite django full-text-search

6
推荐指数
2
解决办法
5365
查看次数

如何在sqlite中使用editdist3

根据对另一个问题的回答,在 sqlite 中,Levenshtein 距离是在名为editdist3. (也比较文档)

现在,当我尝试使用它时,我得到的只是它不存在的错误:

???> sqlite3
SQLite version 3.11.1 2016-03-03 16:17:53
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE test (col1 TEXT);
sqlite> INSERT INTO test VALUES ('foobar');
sqlite> SELECT * FROM test WHERE editdist3(col1, 'f00bar') < 3;
Error: no such function: editdist3
Run Code Online (Sandbox Code Playgroud)

我在 Gentoo Linux 上使用 sqlite-3.11.1(默认) USE 标志icu,readline和secure-delete …

sqlite gentoo levenshtein-distance

5
推荐指数
1
解决办法
2461
查看次数

Sqlite具有真正的"全文搜索"和拼写错误(FTS +拼写一起)

假设我们有100万行像这样:

import sqlite3
db = sqlite3.connect(':memory:')
c = db.cursor()
c.execute('CREATE TABLE mytable (id integer, description text)')
c.execute('INSERT INTO mytable VALUES (1, "Riemann")')
c.execute('INSERT INTO mytable VALUES (2, "All the Carmichael numbers")')
Run Code Online (Sandbox Code Playgroud)

背景:

我知道如何用Sqlite做到这一点:

  • 找到一个单字查询的行,最多有一些拼写错误与spellfix模块和Levenshtein距离(我在这里发布了一个详细的答案,关于如何编译它,如何使用它,...):

    db.enable_load_extension(True)
    db.load_extension('./spellfix')
    c.execute('SELECT * FROM mytable WHERE editdist3(description, "Riehmand") < 300'); print c.fetchall()
    
    #Query: 'Riehmand'
    #Answer: [(1, u'Riemann')]
    
    Run Code Online (Sandbox Code Playgroud)

    使用1M行,这将是超级慢!如此处详述,postgresql可能会对此进行优化trigrams.Sqlite提供的快速解决方案是使用VIRTUAL TABLE USING spellfix:

    c.execute('CREATE VIRTUAL TABLE mytable3 USING spellfix1')
    c.execute('INSERT …
    Run Code Online (Sandbox Code Playgroud)

python sqlite full-text-search levenshtein-distance

5
推荐指数
1
解决办法
1674
查看次数