跳转到主要内容

使用生成器表达式高效过滤SQL表。

项目描述

此模块允许您使用Python构建查询,无需任何东西即可访问(DB API 2) SQL表

import re
import sqlite3
from simpleql.table import Table

conn = sqlite3.connect(":memory:")
curs = conn.cursor()
curs.execute("CREATE TABLE test (a integer, b char(1))")
curs.executemany("INSERT INTO test (a, b) VALUES (?, ?)", ([1,'a'], [2,'b'], [3,'c']))
conn.commit()

table = Table(conn, "test", verbose=1)
for row in table:
    print row

这将打印

SELECT a, b FROM test;
{'a': 1, 'b': u'a'}
{'a': 2, 'b': u'b'}
{'a': 3, 'b': u'c'}

请注意,表中的每一行都是一个字典。我们可以使用生成器表达式来过滤它

aspan = (1, 3)
for row in (t for t in table if min(aspan) < t['a'] < max(aspan)):
    print row

这将打印

SELECT a, b FROM test WHERE (1<a) AND (a<3);
{'a': 2, 'b': u'b'}

如您所见,查询字符串是从生成器表达式构建的。您还可以使用列表推导式。通过使用re.search方法,支持正则表达式

filtered = [t for t in table if re.search('a', t['b'])]
print filtered

这将输出

SELECT a, b FROM test WHERE b LIKE "%a%";
[{'a': 1, 'b': u'a'}]

请注意,由于模块必须分析源代码,因此它不适用于交互式shell。

类似菜谱相比,此方法的优点是,如果高效的查询构建器在遇到复杂过滤器时失败,数据仍然会通过生成器表达式(效率较低)进行过滤。

项目详情


下载文件

下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源代码分发

simpleQL-0.2.tar.gz (5.6 kB 查看哈希值)

上传于 源代码

构建分发版

simpleQL-0.2-py2.6.egg (12.8 kB 查看哈希值)

上传于 源代码

由以下支持